requests
一、collections
是Python内建的一个集合模块,提供了许多有用的集合类。
namedtuple,是一个函数,用来创建一个自定义的tuple对象,格式:namedtuple('名称', [属性list]);
例如:创建一个坐标为(1,2)的点
from collections import namedtuple
Point = namedtuple('Point', ['x','y'])
p = Point(1,2)
p.x1
deque,高效实现插入和删除操作的双向列表,适合用于队列和栈。(list访问数据快,但是插入和删除元素很慢)。
例如:
>>>from collections import deque
>>>q = deque(['a','b','c'])
>>>q.append('x')
>>>q.appendleft('y')
>>>q
deque(['y','a','b','c','x'])
deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。
defaultdict,使用dict时,如果引用的key不存在,就会抛出keyError。所以使用defaultdict可以在key不存在时返回一个默认值。
>>>from collections import defaultdict
>>>dd = defaultdict(lambda:'N/A')
>>>dd['key1'] ='abc'
>>>dd['key1'] # key1存在
'abc'
>>>dd['key2'] # key2不存在,返回默认值
'N/A'
注意默认值是调用函数返回的,而函数在创建defaultdict对象时传入。除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。
OrderedDict,保持dict中的key的顺序(key会按照key插入的顺序排列,不是key本身顺序);
OrderedDict可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key。例如:
from collections import OrderedDict
class LastUpdatedOrderedDict(OrderedDict):
def__init__(self, capacity):
super(LastUpdatedOrderedDict, self).__init__()
self._capacity = capacity
def__setitem__(self, key, value):
containsKey =1 if key in self else 0
if len(self) - containsKey >= self._capacity:
last = self.popitem(last=False)
print'remove:',last
if containsKey:
del self[key]
print'set:', (key, value)
else:print 'add:', (key, value)
OrderedDict.__setitem__(self, key, value)
Counter,是一个简单的计数器,可以用于统计字符出现的个数;counter是dict的一个子类。
二、base64
Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据。base64是一种通过查表的编码方法,不能用于加密,即使使用自定义的编码表也不行;适用于小段内容的编码;
三、struct
struct模块用来解决str和其他二进制数据类型的转换,如struct的pack函数把任意数据类型变成字符串。
>>>import struct
>>>struct.pack('>I',10240099)
'\x00\x9c@c'
说明:pack的第一个参数是处理指令,'>I'的意思是:>表示字节顺序是big-endian,也就是网络序,I表示4字节无符号整数。后面的参数个数要和处理指令一致。
四、hashlib
hashlib提供了常见的摘要算法,如MD5,SHA1;摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
五、itertools
是用于操作迭代对象的函数,
无限迭代器例子:
>>>import itertools
>>>natuals = itertools.count(1)
>>>forninnatuals:
... printn n
...
1
2
...
说明:count(),会创建一个无限的迭代器,所以上述代码会按自然顺序一直打印。
cycle(),会把一个序列无限重复下去。
repeat(),负责把一个元素无限重复下去,不过如果提供第二个参数就可以限定重复次数。
takewhile(),等函数,可以从count()迭代出来的无限序列中,根据条件判断来截取出一个有限的序列。
chain(),可以把一组迭代对象串联起来,形成一个更大的迭代器。
groupby(),把迭代器中相邻的重复元素挑出来放在一起。例如:
>>>for key, group in itertools.groupby('AAABBBCCAAA'):
...print key, list(group)
...
A ['A','A','A']
B ['B','B','B']
C ['C','C']
A ['A','A','A']
imap(),可以作用于无穷序列,如果两个序列的长度不一致,以短的那个为准。imap()和map()的区别在于:imap()返回一个迭代对象,而map()返回list。
ifilter(),ifilter()就是filter()的惰性实现。
六、XML
操作xml的两种方法:DOM和SAX;DOM会把整个XML读入内存,解析为树,占用内存大,解析慢。SAX是流模式,边读边解析,占用内存小,解析快。
在Python中使用SAX解析XML非常简洁,通常我们关心的事件是start_element,end_element和char_data,准备好这3个函数,然后就可以解析xml了。
会产生3个事件:
start_element事件,在读取时;
char_data事件,在读取python时;
end_element事件,在读取时。
七、urllib和urllib2
urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL,所以不能用urllib模块伪装成User Agent字符串等(伪装浏览器);
urllib提供urlencode方法用来GET查询字符串的产生,urllib2没有;
urllib2.urlopen可以接受Request对象作为参数,从而可以控制HTTP Request的header部,这就是urllib2比较近有优势的地方;
urllib.urlretrieve函数以及urllib.quote等一系列quote和unquote功能没有被加入urllib2中,因此有时也需要urllib的辅助
BeautifulSoup
是一个可以从HTML或XML文件中提取数据的Python库。可以实现处理导航、搜索、修改分析树等功能,如需了解更多,可以查看。