模拟浏览器发送请求的库,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’ # 告诉服务需不需要压缩,一般已不需要加;