【BOOK】requests库

一、 Request库

1、 GET请求

  抓取页面(添加headers,修改headers,防止被网站拦截)

#抓取网页,知乎
import requests
import re

## 浏览器标识
headers = {'user-agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
r = requests.get('https://www.zhihu.com/explore', headers=headers)
pattern = re.compile('explore-feed.*?question_link.*?>(.*?)</a>', re.S)
titles = re.findall(pattern, r.text)
print(titles)  

  抓取二进制数据(图片、音频、视频…)

## 抓取二进制数据,获取github的图标,放在当前目录下
import requests
r = requests.get('https://github.com/favicon.ico')
with open('favicon.ico', 'wb') as f:
    f.write(r.content)

 

 

2、 POST请求(提交表单信息)

 

3、 响应(提交请求,返回响应)

 

4、 文件上传

# 文件上传
import requests

files = {'file':open('favicon.ico','rb')}
r = requests.post('http://httpbin.org/post', files=files)
print(r.text)

  

5、 获取、设置Cookies【保存登录状态】

## 获取Cookies
import requests

r = requests.get('https://baidu.com')
print(r.cookies) ## RequestsCookieJar类型
#Cookie遍历解析:item()方法将cookies转换成元组,遍历每一个Cookie的名称和值
for key,value in r.cookies.items(): ##items()将cookies装华为元组组成的列表,遍历每一个cookie的名称和值
    print(key + '=' + value)

 

## Cookies保持登录状态
## 直接在已经登录的网页上获取cookie,赋值给headers
import requests

headers = {
    'cookie':'_zap=bf241714-d6f9-4e5f-9608-fa7b85f32db6; _xsrf=79ff86e9-5e76-4fa6-a384-4f528af88eb9; d_c0="AHBWI_Li4RCPTpXmzvEr1EkNgFDaBMtY-nA=|1582816893"; __guid=74140564.2608088362801457700.1582816893817.983; _ga=GA1.2.1547480939.1582816896; _gid=GA1.2.1931834251.1582816896; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1582816896; capsion_ticket="2|1:0|10:1582818182|14:capsion_ticket|44:MDhiMmFkNmY0YjI1NGRkYzgxMGZkY2Q3Mzk3YWYxZjU=|5bfdca13743bf8cb5de50f1c152f7d51120a4bf811eb2bfafdfc1079d69ffa9d"; z_c0="2|1:0|10:1582818209|4:z_c0|92:Mi4xSU00SERnQUFBQUFBY0ZZajh1TGhFQ2NBQUFDRUFsVk5vSEJfWGdDU2JjQkRxS3JNdElMNmZ3UjIzUVZ1WThyWWFn|61d7ba8d2dca14b10c7004277e43687cc4ef25116720ae3649d656dcc8cfef26"; monitor_count=3; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1582818210; KLBRSID=e42bab774ac0012482937540873c03cf|1582818280|1582816893',
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
r = requests.get('https://www.zhihu.com/people/kuluma-59', headers=headers)
print(r.text)

  

6、 会话维持—Session对象

 

每次使用get()或者post()方法提交请求,相当于不同的会话,等于使用了两个浏览器打开不同页面。

使用Session对象可以维护一个会话,不用担心cookie问题

用于模拟登录

import requests
#第一次提交请求,设置cookie
requests.get('http://httpbin.org/cookies/set/number/123456789')
#第二次提交请求,没有设置cookie
r = requests.get('http://httpbin.org/cookies')
#获取最近一次请求的cookie
print(r.text) #"cookies": {}


import requests
## Session()对象会维持同一个会话
s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)  #  "cookies": {"number": "123456789"}

  

7、 SSL证书验证--vertify参数

如果在请求页面时出现 SSLError 表示证书验证出错,网站的证书没有被官方CA机构信任

需要修改 vertify参数为False,默认时True,这样就会请求成功

import requests
import  requests.packages
import urllib3

urllib3.disable_warnings() ##运行程序时,忽略警告
r = requests.get('https://www.12306.cn', vertify=False)
print(r.status_code)

  

8、 代理设置—proxies参数

大规模且频繁请求网站,可能会弹出验证码或跳转到登录页面,或者封禁IP

※HTTP代理

import requests

proxies = {
    'http':'http://user:password@host:port'
}
requests.get('https://www.taobao.com', proxies=proxies)

 

※SOCKS协议代理

先安装socks库: pip install ‘requests[socks]’

 

import requests

proxies = {
    'http':'socks5://user:password@host:port',
    'https':'socks5://user:password@host:port'
}
requests.get('https://www.taobao.com', proxies=proxies)

  

9、 超时设置—timeout参数

超过设置时间还未响应就抛出异常

 

10、身份认证

import requests

r = requests.get('http://localhost:5000', auth=('username','password'))
print(r.status_code)
## 用户名密码正确返回200,否则401

  

11、Prepared Request

       将请求表示为数据结构

 

posted @ 2020-03-08 16:45  kuluma  阅读(317)  评论(0编辑  收藏  举报