安装
pip install requests
发送GET请求
- 简单的GET请求
resp = requests.get("http://www.baidu.com/")
- 添加headers和查询参数:
import requests
kw = {'wd':'中国'}
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134"
}
# params 接受一个字典或则字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
resp = requests.get("http://www.baidu.com/s",params=kw,headers=headers)
# 查看响应内容,response.text返回的是Unicode(解码)格式的数据,解码的类型可能不准确导致乱码。
# print(resp.text)
# 查看响应内容,response.content返回的是字节流(bytes)数据,没有解码的数据。可以自己decode()解码。在硬盘上和在网络上传输的字符串类型都是bytes类型。
print(resp.content)
# 查看完整的url地址 >> http://www.baidu.com/s?wd=中国
print(resp.url)
# 查看响应头部字符编码
print(resp.encoding)
# 查看响应码
print(resp.status_code)
# 保存网页
with open('baidu.html','w',encoding='utf-8') as fp:
# write()只能写入str列类型数据,bytes类型数据需要解码。
fp.write(resp.content.decode('utf-8'))
发送POST请求
- 最基本的POST请求可以使用post方法:
resp = requests.post("http://www.baidu.com/",data=data)
- 传入data数据,requests不需要使用urlencode进行编码,直接传入一个字典就可以。示例代码(拉勾网):
import requests
url = "https://www.lagou.com/jobs/positionAjax.json?city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false"
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134",
"Referer":"https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput="
}
data = {
'first':'true',
'pn':1,
'kd':'python'
}
resp = requests.post(url,headers=headers,data=data)
# 如果是json数据,可以直接调用json方法。返回dict类型数据。
print(resp.json())
使用代理
requests使用代理非常简单,只要在请求的方法中(get或post)中传递proxies参数就可以了。示例代码:
import requests
url = "http://httpbin.org/ip"
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134"
}
proxy = {
'http':'110.52.235.113:9999', # 免费代理
"http":"http://127.0.0.1:1080", # 使用本机vpn代理时使用
"https":"https://127.0.0.1:1080" # 使用本机vpn代理时使用
}
resp = requests.get(url,headers=headers,proxies=proxy)
print(resp.text)
cookie
- 获取cookie
import requests
resp = requests.get("https://www.baidu.com/")
# print(resp.cookies) # 得到RequestsCookieJar数据
print(resp.cookies.get_dict()) # 使用get_dict()方法获取dict类型数据
session
之前使用urllib库的时候,可以使用opener发送多个请求,多个请求之间时可以共享cookie的。使用requests要实现同样功能(共享cookie),可以使用requests库提供的session对象。此session不是web开发中的session,只是一个会话对象。示例代码,访问需要登陆账号的人人网页面:
import requests
url = "http://www.renren.com/PLogin.do"
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134"
}
data = {
"email":"13478678050",
"password":"renren0915#"
}
# 获取session对象
session = requests.session()
# 通过session发送登陆请求(获取到登陆后的cookie),不需获取返回内容
session.post(url,data=data,headers=headers)
# 验证是否登陆成功,只需访问需要登陆的页面即可。
# 如果data中密码错误,则无法访问需要登陆的页面,会跳转到登陆页面。
resp = session.get("http://www.renren.com/880151247/profile")
with open('renren.html','w',encoding='utf-8') as fp:
fp.write(resp.text)
处理不信任的SSL证书
访问不信任的SSL证书的网站时,需要传递verify参数。示例代码:
resp = requests.get("http://www.12306.cn",verify=False)
print(resp.text)