python3-Request库详解

python3-Request库详解

通过urllib 的基本用法,但是其中确实有不方便的地方,比如处理网页验证和 Cookies 时,需要写 Opener 和 Handler
来处理。 为了更加方便地实现这些操作,就有了更为强大的库 requests

1.requests库简介

1.1 requests库的安装

在命令行界面中运行如下命令, 即可完成 requests 库的安装:
pip3 install requests

1.2 基本用法

urllib 库中的 urlopen()方法实际上是以 GET 方式请求网页,而 requests 中相应的方法就是 get() 方法

import requests
r = requests.get('https://www.csdn.net/')
print(type(r))
print(r.status_code)
print(type(r. text))
print(r.text)
print(r.cookies)

运行结果:
在这里插入图片描述在这里插入图片描述这里我们调用 get()方法实现与 urlopen()相同的操作,得到一个 Response 对象,然后分别输出 了 Response 的类型、状态码、响应体的类型、内容以及 Cookies。

1.3 Get请求

HTTP 中最常见的请求之一就是 GET请求

  • 构建一个最简单的 GET请求,请求的链接为 http://httpbin.org/get
import requests

r = requests.get('http://httpbin.org/get')
print(r.text)

运行结果
在这里插入图片描述

  • 如果要附加额外的信息,比如现在想添加两个参数, 其中 name 是 germey, age 是 22。 要构造这个请求链接
    r = requests.get(‘http://httpbin.org/get?name=germey&age=22’)
import requests

data={
    'name':'germey',
    'age':'22'
}
r = requests.get('http://httpbin.org/get',params=data)
print(r.text)

运行结果
在这里插入图片描述

  • 抓取网页例如知乎
    若代码是如下形式:
import requests
import re
r=requests.get("https://www.zhihu.com/",)
print(r.text)

运行结果在这里插入图片描述
这里我们加入headers信息


mport requests
import re

headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
}
r=requests.get("https://www.zhihu.com/", headers=headers)
print(r.text)

运行结果在这里插入图片描述

  • 抓取二进制数据,下面以 GitHub 的站点图标为例
-import requests
r=requests.get("https://github.com/favicon.ico")
print(r.text)
print(r.content)

这里打印了 Response 对象的两个属性,一个是 text,另一个是 content
在这里插入图片描述接着,我们将刚才提取到的图片保存下来 :

import requests
r=requests.get("https://github.com/favicon.ico")
with open('favicon','wb') as f:
    f.write(r.content)![在这里插入图片描述](https://img-blog.csdnimg.cn/20200126195924321.png)

发现出现文件
在这里插入图片描述
我们刚刚保存的图片
在这里插入图片描述

1.4 Post请求
import requests

data={ 'age':'22'}
r=requests.post("http://httpbin.org/post",data=data)
print(r.text)

输出结果在这里插入图片描述

1.5 响应
import requests

r=requests.get("https://www.csdn.net/")
print(r.status_code)
print(r.headers)
print(r.cookies)

运行结果
在这里插入图片描述状态码常用来判断请求是否成功,而 requests 还提供了一个内置的状态码查询对象 requests.codes,

2.高级用法

2.1 文件上传

requests 可以模拟提交一些数据。 假如有的网站需要上传文件,我们也可以用它来实现

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

在前一节中我们保存了一个文件 favicon.ico,这次用它来模拟文件上传的过程。 需要注意的是, favicon.ico 需要和当前脚本在同一 目录下。

2.2 Cookies

前面我们使用 urllib 处理过 Cookies,写法比较复杂,而有了 requests,获取和设置 Cookies 只需 一步即可完成。

import requests

r=requests.get("https://www.baidu.com")
print(r.cookies)

我们也可以直接用 Cookie 来维持登录状态
在这里插入图片描述

import requests

headers={
    'Cookie':'_zap=2c12f14e-ef5d-4afc-ab3e-af33e0d7ed0b; d_c0="ANDsdiitNxCPTspQdwQQy2y1EwauWeT9H3M=|1571394286"; _xsrf=APdnMsYkSILBvUiKknwPxvtpK6EOacPA; r_cap_id="NmRmZDY1NmM0YzZjNGE3Njg5YmM1MzM5MjNhNzI3ZjE=|1579144278|231a7c1fec00014281cfb717ea77867c2e122535"; cap_id="Y2VlODAxNWYwYzIyNDQ3NTlkZThhZDkwNDhhZTNiMDc=|1579144277|bc245c6af50afe5749eab0f8d357161829810f6a"; l_cap_id="YjQwNzAzNmYzMTA0NDkwZjliOGI0OWYyMzVmNzYxYzM=|1579144278|f2e2c15cfd95c7af51ddf9997ca386d4a3711824"; auth_type=cXFjb25u|1579144288|87cf27a6b4af8d334fa5435775572d18aee1f21d; token="QzUzMjlDNTM0NDhCQTExQjk1NEY1MUY0QTU0RTRDOUY=|1579144288|96f52c6bcd169ef7b62b98719ce2f5dbce8e9313"; client_id="RDRENDRBRjc1OUI0RjIxMDQ2REExRkY2RENFQzdFRjc=|1579144288|cae4206c32d633d8cf04e059304df93b27557e9c"; capsion_ticket="2|1:0|10:1579144305|14:capsion_ticket|44:N2E3MjE1OTBkNzhiNGE0ZGE3YmFmNzU1ODU5NDU5NGE=|73d1cd2ba8a22e91ad5afa6d35967b23f0b493afe0442a2fa02a94361aec0afd"; z_c0="2|1:0|10:1579144348|4:z_c0|92:Mi4xMDlyZ0F3QUFBQUFBME94MktLMDNFQ2NBQUFDRUFsVk5tMkZIWGdCUnFHOEotN1I1QzdmQmNHc29FOC1xUXdmZDJn|2516938d91343daf8e7424f789c79c9908672429bdb7a45bedf499c3a4346846"; tst=r; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1579144204,1580039199; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1580040949; KLBRSID=ca494ee5d16b14b649673c122ff27291|1580040953|1580039197',
    'Host':'https://www.zhihu.com',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
}
r=requests.get("https://zhihu.com",headers=headers)
print(r.text)
2.3 会话维持

解决这个问题的主要方法就是维持同一个会话, 也就是相当于打开一个新的浏览器选项 卡而不是新开一个浏览器。 但是我又不想每次设置 cookies ,那该怎么办呢?这时候就有了Session 对象。

import requests 
s = requests. Session()
s.get(’http: //httpbin.org/cookies/set/number/123456789') 
r = s.get(’http://httpbin.org/cookies ') 
print(r.text) 

利用 Session ,可以做到模拟同一个会话而不用担心 Cookies 的问题。 它通常用于模拟登录 成功之后再进行下一步的操作。

2.4 SSL证书验证

12306 的证书没有被官方 CA 机构信任,会阳现证书验证错误的结果。

import requests 
response = requests.get(’https://WVM.12306.cn’)
print(response.status code) 

这里提示一个错误 SSLError,表示证书验证错误

import requests 
response = requests.get(’https: I /www .12306. en ’, verify=False)
print(response.status_code) 

把 verify 参数设置为 False 即可避开错误

2.5 代理设置

对于某些网站,在测试的时候请求几次, 能正常获取内容。 但是一旦开始大规模爬取,对于大规 模且频繁的请求,网站可能会弹出验证码,或者跳转到登录认证页面, 更甚者可能会直接封禁客户端 的 IP,导致一定时间段内无法访问。

import requests 
proxies = { "https":http: I 110 .10.1.10: 3128", 
			"https":vhttp: //10.10.1.10: 1080", 
}
requests.get(https://www.taobao. com" , proxies=proxies) 

请换成自己的有效代理试验

2.6 超时设置

需要用到 timeout 参数

import requests
r = requests.get('https://www.taobao.com'.timeout=1)
print(r.status_code)

如果想永久等待,可以直接将 timeout 设置为 None,或者不设置直接留空

2.7 身份认证

在访问网站时,我们可能会遇到这样的认证页面
在这里插入图片描述
此时可以使用 requests 自带的身份认证功能

import requests 
r = requests .get(' http: I /localhost: sooo' , auth=(’ username ' ,’ password'))
print(r.status_ code) 

requests 还提供了其他认证方式,如 OAuth 认证,更多详细的功能可以参考 requests_oauthlib 的官方文档
https://requests-oauthlib.readthedocs.org/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值