python爬虫(二)

urllib模块

python2中有urlliburllib22个模块,虽然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
11
import 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
15
import 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下载
  1. 使用urllib中的request.urlretrieve方法

    1
    2
    3
    4
    from urllib import request

    url = "http://inews.gtimg.com/newsapp_match/0/3967692951/0"
    request.urlretrieve(url, 'qq.jpg')
  2. 使用urlopen得到response信息,然后读取

    1
    2
    3
    4
    5
    6
    7
    8
    from 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)

Recommended Posts