requests模块高级使用

编辑本随笔

一、Cookie

 cookie作用:服务器使用cookie来记录客户端的状态信息

实现流程:

  1. 执行登陆操作(获取cookie)
  2. 在发起个人主页请求时,需要将cookie携带到该请求中

注意:session对象,也可以发送请求,如果服务器端会给客户端返回cookie,session对象自动将cookie进行存储

import requests

#创建session对象
session = requests.session()

#创建headlers
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
}

#指定login对应url
login_url = "https://accounts.douban.com/j/mobile/login/basic"

#封装登陆相关数据
data = {
    "ck": "",
    "name": "17502368221",
    "password": "cv@125436",
    "remember": "true",
    "ticket": ""
}

#使用session发起登陆请求,将cookie获取且存储到session当中
login_response=session.post(url=login_url,data=data,headers=headers)

#使用session对个人主页发起请求,获取响应页面数据
home_url="https://www.douban.com/people/191728538/"

response=session.get(url=home_url,headers=headers)

page_text=response.text

with open("./doubanHomePage.html",'w',encoding="utf-8") as fp:
    fp.write(page_text)

二、代理

代理:第三方代替本体执行相关事务

什么要使用代理:

  1. 反爬操作。
  2. 反反爬手段

分类:

  1. 正向代理:代理客户端获取数据(爬虫使用正向代理)
  2. 反向代理:代替服务端提供数据

免费代理IP提供商:

  1. www.goubanjia.com
  2. 快代理
  3. 西祠代理

注意:我们请求网站的使用的协议和代理使用的协议要保证一致,http或者https

import requests

url = 'http://www.baidu.com/s?wd=ip&ie=utf-8'

#将代理IP封装到一个字典中
proxy={
    "http":"195.208.172.70:8080"
}

#构建headers
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
}

#在请求之前更换网络IP
response=requests.get(url=url,headers=headers,proxies=proxy)

#数据持久化
page_text=response.text
with open("./代理.html",'w',encoding='utf-8') as fp:
    fp.write(page_text)

 三、加载证书密钥

 requests模块在发起https请求时需要加载SSL证书,否则会报requests.exceptions.SSLError: HTTPSConnectionPool(host='www.baidu.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),))错误,

参考官方文档

证书准备

由于我需要Fiddler来代理requests请求,所以requests模块需要加载Fiddler的根证书,但Fiddler导出的证书是CER格式。

但是requests支持的是pem格式,所以需要借助openssl工具来进行格式转换。

openssl在win下编译安装比较麻烦,点这里直接下载别人编译好的安装包,安装完成后用如下命令进行转换

openssl x509 -inform der -text -in FiddlerRoot.cer -out C:\Users\ya\Desktop\out.pem

requests使用证书

在请求参数中直接添加verify参数即可

response = requests.get(url='https://www.baidu.com', headers=headers,proxies=proxies,verify=r'C:\Users\ya\Desktop\out.pem')

 在session中使用如下方式(未验证)

s = requests.Session()
s.verify = '/path/to/certfile'

 

posted @ 2019-02-14 17:32  丫丫625202  阅读(165)  评论(0编辑  收藏  举报