urllib模块
python2中有urllib
和urllib2
2个模块,虽然urllib2
是升级版,但是依然不能替代urllib
,各有所长。
python3中全部封装成一个urllib
。
python2中的ubllib和urllib2
urllib 和urllib2都是接受URL请求的相关模块,但是urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。这意味着,urllib不可以伪装你的User Agent字符串等。
urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。
python3和python2使用差异
使用urllib中的request发送数据,无法直接传入字典类的参数,需要进行数据转换。
python2中为data = urlib.urlencode(data) urllib2.Request(url, data)
,示例如下1
2
3
4
5
6
7
8
9
10
11import urllib, urllib2
url = "http://www.baidu.com"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36",
"Host": "www.baidu.com"
}
data = {"k1": "v1", "k2": "v2"}
data = urllib.urlencode(data)
print(data) #输出结果:k2=v2&k1=v1
response = urllib2.Request(url=url, headers=headers, data=data)
python3中data = urllib.parse.urlencode(data) urllib.request.Request(url, data)
,示例如下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15import urllib
from urllib import parse
from urllib.request import Request
url = "http://www.baidu.com"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36",
"Host": "www.baidu.com"
}
data = {"k1": "v1", "k2": "v2"}
data = parse.urlencode(data)
print(data) #输出结果:k2=v2&k1=v1
response = Request(url=url, headers=headers, data=data)
- urllib下载
使用urllib中的
request.urlretrieve
方法1
2
3
4from urllib import request
url = "http://inews.gtimg.com/newsapp_match/0/3967692951/0"
request.urlretrieve(url, 'qq.jpg')使用
urlopen
得到response信息,然后读取1
2
3
4
5
6
7
8from urllib import request
url = "http://inews.gtimg.com/newsapp_match/0/2711870562/0"
req = request.Request(url)
res = request.urlopen(req)
text = res.read()
with open("2.jpg", "wb") as f:
f.write(text)