安装

  1. pip install requests

发送GET请求

  1. 简单的GET请求
  1. resp = requests.get("http://www.baidu.com/")
  1. 添加headers和查询参数:
  1. import requests
  2. kw = {'wd':'中国'}
  3. headers = {
  4. "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"
  5. }
  6. # params 接受一个字典或则字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
  7. resp = requests.get("http://www.baidu.com/s",params=kw,headers=headers)
  8. # 查看响应内容,response.text返回的是Unicode(解码)格式的数据,解码的类型可能不准确导致乱码。
  9. # print(resp.text)
  10. # 查看响应内容,response.content返回的是字节流(bytes)数据,没有解码的数据。可以自己decode()解码。在硬盘上和在网络上传输的字符串类型都是bytes类型。
  11. print(resp.content)
  12. # 查看完整的url地址 >> http://www.baidu.com/s?wd=中国
  13. print(resp.url)
  14. # 查看响应头部字符编码
  15. print(resp.encoding)
  16. # 查看响应码
  17. print(resp.status_code)
  18. # 保存网页
  19. with open('baidu.html','w',encoding='utf-8') as fp:
  20. # write()只能写入str列类型数据,bytes类型数据需要解码。
  21. fp.write(resp.content.decode('utf-8'))

发送POST请求

  1. 最基本的POST请求可以使用post方法:
  1. resp = requests.post("http://www.baidu.com/",data=data)
  1. 传入data数据,requests不需要使用urlencode进行编码,直接传入一个字典就可以。示例代码(拉勾网):
  1. import requests
  2. url = "https://www.lagou.com/jobs/positionAjax.json?city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false"
  3. headers = {
  4. "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",
  5. "Referer":"https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput="
  6. }
  7. data = {
  8. 'first':'true',
  9. 'pn':1,
  10. 'kd':'python'
  11. }
  12. resp = requests.post(url,headers=headers,data=data)
  13. # 如果是json数据,可以直接调用json方法。返回dict类型数据。
  14. print(resp.json())

使用代理

requests使用代理非常简单,只要在请求的方法中(get或post)中传递proxies参数就可以了。示例代码:

  1. import requests
  2. url = "http://httpbin.org/ip"
  3. headers = {
  4. "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"
  5. }
  6. proxy = {
  7. 'http':'110.52.235.113:9999', # 免费代理
  8. "http":"http://127.0.0.1:1080", # 使用本机vpn代理时使用
  9. "https":"https://127.0.0.1:1080" # 使用本机vpn代理时使用
  10. }
  11. resp = requests.get(url,headers=headers,proxies=proxy)
  12. print(resp.text)

cookie

  1. 获取cookie
  1. import requests
  2. resp = requests.get("https://www.baidu.com/")
  3. # print(resp.cookies) # 得到RequestsCookieJar数据
  4. print(resp.cookies.get_dict()) # 使用get_dict()方法获取dict类型数据

session

之前使用urllib库的时候,可以使用opener发送多个请求,多个请求之间时可以共享cookie的。使用requests要实现同样功能(共享cookie),可以使用requests库提供的session对象。此session不是web开发中的session,只是一个会话对象。示例代码,访问需要登陆账号的人人网页面:

  1. import requests
  2. url = "http://www.renren.com/PLogin.do"
  3. headers = {
  4. "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"
  5. }
  6. data = {
  7. "email":"13478678050",
  8. "password":"renren0915#"
  9. }
  10. # 获取session对象
  11. session = requests.session()
  12. # 通过session发送登陆请求(获取到登陆后的cookie),不需获取返回内容
  13. session.post(url,data=data,headers=headers)
  14. # 验证是否登陆成功,只需访问需要登陆的页面即可。
  15. # 如果data中密码错误,则无法访问需要登陆的页面,会跳转到登陆页面。
  16. resp = session.get("http://www.renren.com/880151247/profile")
  17. with open('renren.html','w',encoding='utf-8') as fp:
  18. fp.write(resp.text)

处理不信任的SSL证书

访问不信任的SSL证书的网站时,需要传递verify参数。示例代码:

  1. resp = requests.get("http://www.12306.cn",verify=False)
  2. print(resp.text)