模拟浏览器发送请求的库,python自带。
Python2 |
Python3 |
urllib |
urllib.request |
urllib2 |
urllib.parse |
urllib.requset
1 2 3 4 5 6 7
| response = req.urlopen(url) # 请求网络 response的常见函数: 1、read():读取相应内容,内容是二进制格式; 2、geturl():获取请求的url; 3、getheaders():获取头部信息; 4、getcode():获取状态嘛; 5、readlines():按行读取,一般很少使用;
|
urllib.parse
urllib.parse.quote
1 2
| ret = urllib.parse.quote.(url) #编码 ret = urllib.parse.unquote.(url) #解码
|
urllib.parse.urlencode
将参数进行编码:
1
| urllib.parse.urlencode(data) # 需要传递一个字典
|
get请求
1 2 3 4 5
| headers = {'user-Agent' : ''} # 构建请求对象(这实际上也是反爬的第一步,通过伪装自己的UA(user-agent);) request = urllib.requset.Requset(url, header=headers) # 发送请求 response = urllib.requset.urlopen(request)
|
post请求
1 2 3 4 5
| headers = {'user-agent': 'Huang'} data = {'name': 'Huang', 'age': '26'} # 队请求的参数进行编码query = parse.urlencode(data) req = request.Request('http://www.baidu.com/', query, headers) response = request.urlopen(req)
|
注意
某些时候在模拟某个浏览器请求数据的时候,可能会出现接口报错的情况,那么有可能需要我们全部的请求参数,包括请求头全部都传过去,但是,有两个参数不能传:
- ‘Content-Length’ : ‘120’#是内容长度,有时候会自动计算,但以防万一还是不要加;
- ‘Accept-Encoding’ : ‘gzip,deflate’ # 告诉服务需不需要压缩,一般已不需要加;