上接:
Python3网络爬虫教程10——ajax异步请求(爬取豆瓣电影数据 )
7. Requests
- HTTP for Humans-献给人类,更好用,更简洁
- 继承了urllib的所有特性
- 底层使用的是urllib3
- 开源地址:https://github.com/requests/requests
- 中文文档:http://docs.python-requests.org/zh_CN/latest/#
7.1. get请求
- 有两种方式
- requests.get(url)
- requests.request(‘get’, url)
- 可以带有headers和params参数
- 参考案例43_21
import requests
# 两种请求方式
url = 'http://www.baidu.com'
rsp = requests.get(url)
print(rsp.text)
rsp = requests.request('get', url)
print(rsp.text)
- get返回的内容
- 参考案例43_22
# 利用参数headers和params研究返回的内容
# 研究返回的结果
import requests
# 完整的访问url是下面的url加上参数组成的完整url
url = 'http://www.baidu.com/s?'
kw = {
'wd': '美女'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6788.400 QQBrowser/10.3.2854.400'
}
rsp = requests.get(url, params=kw, headers=headers)
print(rsp.text)
print(rsp.content)
print(rsp.url)
print(rsp.encoding)
print(rsp.status_code)
7.2. post请求
- rsp = requests.post(url, data=data)
- 参考案例43_23
# 本案例来自案例43_5,使用的urllib库
# 本案例使用requests库
"""
大致流程:
1. 利用data构造内容
2. 返回一个json格式的内容
3. 结果就应该是girl的释义
"""
# 本案例使用requests,会发现会比43_5案例编码简洁很多
# data直接使用字典,不用编码,json数据可以直接读取也不用解码
import requests
baseurl = 'https://fanyi.baidu.com/sug'
# 存储用来模拟formdata的数据一定是字典格式
wd = input('Input your keyword: ')
data = {'kw': wd}
# 43_5中需要对data进行编码,编码为字节
# data = parse.urlencode(data).encode('utf-8')
# requests中可以直接使用字典格式的data
rsp = requests.post(baseurl, data=data)
# 直接取出json数据就是一个python格式的字典了
json_data = rsp.json()
# 查看结果是一个字典,取出字典中键data对应的值是一个列表,
# 列表中又是有多个字典,每个字典中有两个键值对,将两个值取出,一一对应
for item in json_data['data']:
print(item['k'], "-----", item['v'])
7.3. proxy代理
- proxy
proxies = {
‘http’: ‘address of proxy’,
‘https’: ‘address of proxy’,
}
rsp = requests.request(‘get’, ‘http//:xxx’) - 代理有可能报错,如果使用人数多,考虑安全问题,代理可能被强行关闭
7.4. 用户验证
- 代理验证
- 可能需要使用HTTP basic Auth, 类似下面
- 格式为:用户名:密码@代理地址:端口地址
proxy = {‘http’: ‘name:123456@192.168.1.123:4444’}
rsp = requests.get(‘http://www.baidu.com’, proxies = proxy)
- web客户端验证
- 遇到web客户端验证,需要添加auth=(用户名,密码)
auth=(‘name’, ‘12346’)
rsp=requests.get(‘http://www.baidu.com’, auth = auth)
7.5. cookie
- requests可以自动处理cookie信息
- rsp = requests.get(‘http//:xxx’)
- 如果对方服务器传送过来cookie信息,则可以通过反馈的cookie属性得到
- 返回一个cookiejar的实例
- cookiejar = rsp.cookies
- cookiejar的实例可以转成字典
- cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
7.6. session
- 跟#4.中的服务器中的session不是一个东东
- 模拟一次会话,从客户端浏览器链接服务器开始,到客户端浏览器断开
- 上述过程中的信息保存在session中
创建session对象,可以保持cookie值
ss = requests.session()
headers = {‘User-Agent’: ‘xxxxxx’}
data = {‘name’: ‘xxxxx’}
此时,由创建的session管理请求,负责发出请求
ss.post(‘URL’, data = data, headers = headers)
rsp = ss.get(‘xxxxxx’)
7.7. https请求验证ssl证书
- 参数verify负责表示是否需要验证ssl证书,默认是True
- 如果不需要验证ssl证书,则设置成False表示关闭
- 写法
rsp = requests.get('https://www.12306.com', verify = False)
下接:
Python3网络爬虫教程12——页面解析及正则表达式的使用