requests 库 第三方库
1. 发送GET/POST请求
import requests
# 添加headers 和 查询参数 信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
}
url = 'https://www.baidu.com/'
kw = {'wd': '中国'}
response = requests.get(url, headers=headers, params=kw)
print(response)
#查询响应内容
# print(response.text) #返回Unicode格式数据
#
# print(response.content) #返回字节流数据
# print(response.content.decode('utf-8')) #产生乱码时
print(response.url)
print(response.encoding) #响应字符编码
注意,content和text的不同,
response.text 返回的是Unicode格式数据
response.content 返回的是字节流数据,当出现乱码时需要使用decode()进行解码
2. Proxies 代理
之前在urllib库的介绍中已经介绍过代理IP的使用,在requests中代理的原理都是一样的,使用起来不同的地方在于 requests库更简洁方便,直接将代理放到了请求方法的proxies属性中即可,如下:
import requests
url = 'http://httpbin.org/ip'
proxy = {
'http': '123.160.68.74:9999'
}
resp = requests.get(url, proxies=proxy)
print(resp.text)
3. Cookie
如果一个响应中包含了cookie,那么可以利用cookies 属性拿到这个返回cookie值
3.1 利用cookie实现模拟登录
import requests
# resp = requests.get('https://www.baidu.com/')
# print(resp.cookies)
# print(resp.cookies.get_dict())
url = 'https://www.zhihu.com/hot'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36',
'cookie': '_zap=9cb16e80-2e5a-442a-ad83-8c4e56151274; d_c0="AHBUkeFrFhGPThKJGfZWuvXPYdeDQlxWqI4=|1586342451"; _xsrf=KGrwON9rdqf1Va6QrWyiLwNOTRoK5SPY; _ga=GA1.2.925220024.1595327992; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1595327992,1595330061,1595376694; capsion_ticket="2|1:0|10:1599905310|14:capsion_ticket|44:NzhiNDdjZDFjNjBiNDAxOThhNWI3ODQ0MDJhMGQxZGU=|c18f9b858f5a3b1953d240092ab6d1be2fcdd60cb4ca8bdcb531a2161f93fb1b"; z_c0="2|1:0|10:1599905438|4:z_c0|92:Mi4xbkV5a0JRQUFBQUFBY0ZTUjRXc1dFU2NBQUFDRUFsVk5uaXVFWHdEQXZmUFJ5Y0x4WC1ySS1wQ0dYQnl5ZHh3RVhB|29705d2526c129e3642b869de321e6f086c38b17aa2c1285a131192d2de3477b"; tst=h; tshl=; q_c1=1de7075e7f0448aeb62af8961806c2f1|1599916711000|1588725781000; KLBRSID=2177cbf908056c6654e972f5ddc96dc2|1599917151|1599915145'
}
resp = requests.get(url, headers=headers)
print(resp.text)
3.2 Session,实现共享cookie
import requests
post_url = 'https://i.meishi.cc/login.php?redirect=https%3A%2F%2Fwww.meishij.net%2F'
post_data = {
'username':'[email protected]',
'password':'wq15290884759.'
}
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
# 登录
session = requests.session()
session.post(post_url,headers=headers,data=post_data)
#访问个人网页
url = 'https://i.meishi.cc/cook.php?id=13686422'
resp = session.get(url)
print(resp.text)
4. 处理不信任的SSL证书
4.1 SSL证书
SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。
SSL证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。
https://baike.baidu.com/item/SSL%E8%AF%81%E4%B9%A6/5201468?fr=aladdin
如果时不信任SSL请求时会出现报错:如下面这个请求出现报错
import requests
url = 'https://inv-veri.chinatax.gov.cn/'
resp = requests.get(url)
print(resp.text)
因此,针对这种情况添加 verify属性值之后便能够正常访问。
import requests
url = 'https://inv-veri.chinatax.gov.cn/'
resp = requests.get(url, verify=False)
print(resp.text)