Welcome To Jeremy's Blog --------------------------            JeremyYu

1.3 请求库 -- requests库的使用


reuqests 请求库 — 基础应用

1.requests请求库介绍

1 # 介绍:
2     urllib请求库中提供的模块和方法可以基本满足我们爬取数据的需求,但它使用起来比较繁琐,比如处理网页验证和Cookies时,需要写Opener和Handler来处理。为了更加方便地实现这些操作,就有了更为强大的库requests,有了它,Cookies、登录验证、代理设置等操作都显得比较从容优雅了。
3 
4 # 安装:
5     pip install requests

返回顶部


2.requests支持的请求方法

  requests模块支持post, get, put, delete, head, options等请求方式, 实际上爬虫程序中常用的就是get和post请求方式.


3.requests — get请求

 1 1.requests的get方法如下:
 2     requests.get(url,params=None,**kwargs)
 3       url:要请求的服务器地址
 4       params:请求参数
 5       **kwargs:动态位置参数,一般会传请求头中的User-Agent
 6 
 7 2.模拟请求百度,搜索关键字"爬虫"
 8 import requests
 9 
10 # 构建请求的url
11 url ="https://www.baidu.com/s?"
12 
13 # 设置请求头的UA
14 headers ={
15 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'
16 }
17 
18 # 定义参数, 搜索关键字为爬虫
19 param ={
20 'wd':"爬虫"
21 }
22 
23 # 请求百度服务器
24 response = requests.get(url=url,params=param, headers=headers)
25 print(response.text)# 打印数据结果

返回顶部


4.requests — post请求

 1 # 1.requests的post请求方法如下:
 2     requests.post(url=url, data=data, json=None,**kwargs)
 3         url:请求的url地址
 4         data:请求参数
 5         json:默认参数
 6         **kwargs:动态关键字参数,可以传入headers
 7 
 8 # 2.模拟请求http://httpbin.org/post, 并传入formdata数据为{'name': 'germey', 'age': '22'}
 9 import requests
10 data ={'name':'germey','age':'22'}
11 r = requests.post("http://httpbin.org/post", data=data)
12 print(r.text)            

返回顶部


5.三种数据的抓取及对应解析

  (1)在爬取数据中一般分为三种数据类型: 文本类型, json类型, 二进制数据流

  (2).三种数据类型对应解析方式:

​     1).文本类型 — response.text

​     2).json类型 — response.json()

​     3).二进制数据流 — response.content()

  (response是响应对象, 通过text可以得到文本类型的文本, json可以得到序列化数据, content可以得到二进制数据流)

返回顶部


request 请求库 — 高级应用

1.文件上传操作(使用场景较少)

  requests模块可以向服务器提交数据, 当然requests也可以像服务器提交文件.

1 import requests
2 url ="http://httpbin.org/post"
3 files ={'file': open('mypicture.jpg','rb')}
4 r = requests.post(url=url, files=files)
5 print(r.text)

返回顶部


2.Cookies的处理

  Cookies被包含在请求头中, 所以处理Cookies的思路是在headers中设置Cookies的简直对

 1 import requests
 2 
 3 # 设置请求头信息, 内部包含UA和Cookies
 4 headers ={
 5 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36',
 6 'Cookies':'BAIDUID=79A570F8D90B2C45E42D40A3666ADC46:FG=1; BIDUPSID=79A570F8D90B2C45E42D40A3666ADC46; PSTM=1551074009; BD_UPN=12314753; BDUSS=g0QUVVcGJiY2FaUWhQT1VPQWJlRW5oN2V2eW5PVDVsa2x4WUV4RUg5aUFpUlJkRVFBQUFBJCQAAAAAAAAAAAEAAABwfMtW09rQodPjMDgyMGZyZWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID87FyA~OxcaX; B64_BOT=1; cflag=13%3A3; BD_HOME=1; BDRCVFR[n9IS1zhFc9f]=mk3SLVN4HKm; delPer=0; BD_CK_SAM=1; PSINO=2; BDRCVFR[qvT0xz2ZIzc]=mk3SLVN4HKm; H_PS_PSSID=1452_21117_29063_28519_29099_29139_28831_28584; BDRCVFR[EJqU0HkOX2D]=mbxnW11j9Dfmh7GuZR8mvqV; shifen[100846344216_32166]=1559294031; BCLID=8536685883861864975; BDSFRCVID=i14OJeC624Goeqv9PXrBuyYwylGFKQoTH6aoKKyozKPxaCXLkQcVEG0Pjx8g0KAbk4cGogKK0mOTHv8F_2uxOjjg8UtVJeC6EG0P3J; H_BDCLCKID_SF=tJFDVIthfIP3jbIk-Pnfbtu_hgT22jn0tRn9aJ5nJD_Msn7NKJDB0hkXLlo8XRb8agvlaMjOQpP-HJ7oynro2xPr2MQmXU7WLC7pKl0MLncWbb0xyUQDMT0SQUnMBMPjamOnaPLy3fAKftnOM46JehL3346-35543bRTohFLK-oj-DDxD5-W3e; sugstore=0; COOKIE_SESSION=1746_1_6_4_7_14_0_3_2_5_95_0_3107_0_0_0_1559134108_1559294112_1559304830%7C9%230_1_1559294027%7C1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDSVRTM=0'
 7 }
 8 url ='https://www.baidu.com/s?'
 9 
10 # 构建提交的搜索参数
11 params ={
12 'wd':'爬虫'
13 }
14 
15 response = requests.gett(url=url,params=params, headers=headers)
16 print(response.text)

返回顶部


3.会话的维持

  在真实用户通过浏览器访问服务器获取资源的过程中, 一部分网站时要求用户每次访问携带cookies的, 这样服务器通过cookies来判别用于的上一次会话状态, 从而实现会话的维持. Cookies的获取, 存储, 以及访问携带Cookies的过程和细节对真实用户是隐藏的, 真实用户是感知不到的.

  但对于爬虫程序来说就要自己实现这个过程了, 从而维持会话. 在requests模块中就用到了session来维持会话, session会自动获取Cookies, 并且下一次访问自动封装Cookies. 值得注意的是, 要维持会话, 这个访问过程不能间断, 即要一直使用session进行访问.

 1 import requests
 2 
 3 # 实例化一个session对象
 4 s = requests.Session()
 5 
 6 # 使用session对象进行请求
 7 s.get('http://httpbin.org/cookies/set/number/123456789')
 8 
 9 # 要想一致保持会话, 每一次请求都要使用session对象进行请求
10 r = s.get('http://httpbin.org/cookies')
11 print(r.text)

返回顶部


4.SSL证书验证

  requests还提供了证书验证的功能。当发送HTTP请求的时候,它会检查SSL证书,我们可以使用verify参数控制是否检查此证书。其实如果不加verify参数的话,默认是True,会自动验证。把verify参数设置为False即可.

1 import requests
2 
3 # 把verify设置为False便不会进行证书的验证了, 就不会抛出SSLError异常
4 response = requests.get('https://www.12306.cn', verify=False)
5 print(response.status_code)

返回顶部


5.代理设置

  爬虫程序一般是要请求大量数据的, 虽然是模拟浏览器人工请求数据, 但请求的数据量与频率是不可能像正常用户请求的, 这样一来服务器监测到我们的爬虫程序, 很有可能就被限制访问, 把ip给封掉了. 如果主动限制访问频率和请求数据量是我们不想的, 毕竟爬取大量的数据还是需要效率的.

  如果通过ip代理, 就可以把大量的请求分发个不同的代理ip, 减小了一个ip的访问压力, 不容易被服务器识别出来.

 1 import requests
 2 
 3 # 设置代理ip池(也可同时设置一个UA池)
 4 proxies ={
 5 "http":"http://10.10.1.10:4526",
 6 "https":"http://10.10.1.10:3732",
 7 }
 8 
 9 # proxies参数就是ip代理, 每次请求会从ip池选取代理ip请求
10 requests.get("https://www.taobao.com", proxies=proxies)

返回顶部

posted on 2018-03-11 22:19  Jeremy_Yu  阅读(247)  评论(0)    收藏  举报

导航