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 requestsr = 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 requestsdata={'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 reheaders={'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 requestsdata={ 'age':'22'}
r=requests.post("http://httpbin.org/post",data=data)
print(r.text)

输出结果

1.5 响应

import requestsr=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 requestsr=requests.get("https://www.baidu.com")
print(r.cookies)

我们也可以直接用 Cookie 来维持登录状态

import requestsheaders={'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/

python3-Request库详解相关推荐

  1. 【request库详解】

    Request库 request库中文文档:https://docs.python-requests.org/zh_CN/latest/user/quickstart.html 视频链接:https: ...

  2. python3中urllib库_Python--urllib3库详解

    Python--urllib3库详解 Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3.Urllib3提供了很多pyth ...

  3. Python Urllib库详解

    Urllib库详解 什么是Urllib? Python内置的HTTP请求库 urllib.request 请求模块 urllib.error 异常处理模块 urllib.parse url解析模块 u ...

  4. [进阶] --- Python3 异步编程详解(史上最全篇)

    [进阶] - Python3 异步编程详解:https://blog.csdn.net/lu8000/article/details/45025987 参考:http://aosabook.org/e ...

  5. python gpu加速库比matlab快吗_Python之Unittest和Requests库详解

    1.按类来执行 import unittest class f1(unittest.TestCase): def setUp(self): pass def tearDown(self): pass ...

  6. 爬虫笔记:Requests库详解

    什么是Requests 之前讲解了爬虫笔记:Urllib库详解发现确实有不方便的地方,比如加一个代理,cookie,发送post请求比较繁琐. Request库能用几句话实现这些. Requests ...

  7. python爬虫之urllib库详解

    python爬虫之urllib库详解 前言 一.urllib库是什么? 二.urllib库的使用 urllib.request模块 urllib.parse模块 利用try-except,进行超时处理 ...

  8. 爬虫入门之urllib库详解(二)

    爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...

  9. python如何设置画布开始位置_Python绘图篇——Turtle库详解(一)

    交流学习python编程技术及行业动态,点击上方"蓝字"关注我们 Python绘图篇--Turtle库详解(一) 写在前面 ↓ 注:本教程基于64位windows系统(鼠标右键点击 ...

  10. Python--urllib3库详解

    Python--urllib3库详解1 Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3.Urllib3提供了很多pyt ...

最新文章

  1. php正则表达式函数 preg_replace用法
  2. IntelliJ IDEA 如何创建一个普通的java项目,及创建java文件并运行
  3. 【机器视觉】 comment算子
  4. 您访问的网页出错了! 网络连接异常、网站服务器失去响应_数据分析系列——静态网页爬虫进阶(requests)...
  5. Scikit-Learn简单操作
  6. orocod_kdl学习(一):坐标系变换
  7. 2016 1月1日-1月1日python 学习总结
  8. Typora上使用Latex语法(持续更新)
  9. 面试题:Java多线程
  10. Android 版本适配:9
  11. 简单学JAVA-Java学习方法-JavaSE阶段
  12. 【附源码】Java计算机毕业设计校园博客系统(程序+LW+部署)
  13. QGIS加载无偏移卫星地图URL
  14. chroma负载机恒压工作原理_一款恒压/恒流充电器工作原理分析
  15. P1002 [NOIP2002 普及组] 过河卒
  16. 趣拿场景营销拥有哪些黑科技
  17. Linux查看被拦截的日志,imperva拦截日志的实时报警
  18. C语言/C++常见习题问答集锦之哆啦A梦
  19. 小游戏与H5游戏对比与梳理
  20. Ionic React和Capacitor入门

热门文章

  1. 手机性能测试软件排行榜,2017智能手机性能排行榜 智能手机性能检测
  2. 汕头正宗的牛肉丸多少钱一斤的
  3. 使用线程池插入数据报Could not open JDBC Connection for transaction 异常
  4. Android音乐播放器开发(5)—播放界面(播放、暂停、上一首、下一首,顺序播放、随机播放、拖拽进度条…)
  5. 瑞思迈将以2.25亿美元收购COPD及哮喘互联健康解决方案领导者Propeller Health
  6. tidb 集群部署详细步骤
  7. WPF特效-鱼游动动画2
  8. 解决 报错ora-04098: oracle trigger 触发器无效且未通过重新验证
  9. Procella@Youtube 把计算加速玩到极致的实时计算引擎
  10. XMind 8 Update 9 安装出现一些问题