爬虫相关--requests库
requests的理想:HTTP for Humans
1|0一、八个方法
相比较urllib模块,requests模块要简单很多,但是需要单独安装:
- 在windows系统下只需要在命令行输入命令 pip install requests 即可安装。
- 在 linux 系统下,只需要输入命令 sudo pip install requests ,即可安装。
requests库的八个主要方法
方法 | 描述 |
---|---|
requests.request() | 构造一个请求,支持以下各种方法 |
requests.get() | 向html网页提交get请求的方法 |
requests.post() | 向html网页提交post请求的方法 |
requests.head() | 获取html头部信息的主要方法 |
requests.put() | 向html网页提交put请求的方法 |
requests.options() | 向html网页提交options请求的方法 |
requests.patch() | 向html网页提交局部修改的请求 |
requests.delete() | 向html网页提交删除的请求 |
请求之后,服务器通过response返回数据,response具体参数如下图:
属性 | 描述 |
---|---|
r.status_code | http请求的返回状态,若为200则表示请求成功 |
r.text | http响应内容的字符串形式,即返回的页面内容 |
r.encoding | 从http header 中猜测的相应内容编码方式 |
r.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
r.content | http响应内容的二进制形式 |
r.headers | 响应头 |
r.cookies | cookie |
r.url | url |
r.history | 请求历史 |
2|0requests.request(method, url, **kwargs)
- method:即 get、post、head、put、options、patch、delete
- url:即请求的网址
- **kwargs:控制访问的参数,具体参数如下:
2|1params
字典或字节序列,作为参数增加到url中。使用这个参数可以把一些键值对以?key1=value1&key2=value2的模式增加到url中
2|2data
字典,字节序或文件对象,重点作为向服务器提供或提交资源是提交,作为request的内容,与params不同的是,data提交的数据并不放在url链接里, 而是放在url链接对应位置的地方作为数据来存储。它也可以接受一个字符串对象。
2|3json
json格式的数据, json合适在相关的html,http相关的web开发中非常常见, 也是http最经常使用的数据格式, 他是作为内容部分可以向服务器提交。
2|4files
注意点: Content-Type: multipart/form-data; boundary=${bound}
这个 headers不要传入
上传文件的的接口参数的类型为content-type:multipart/form-data,那么我们使用requests来发送请求的时候,接口中文件上传的参数需要使用files来传递。files参数格式如下
文件上传的参数准备好了,那么接口中其他的参数怎么处理呢?其他的参数使用data传递即可。参数组织如下:
单文件上传
多文件上传
2|5流式上传文件
1,requests-toolbelt 扩展库
2,使用流式上传文件
- 不同于 requests 全部读到内存中上传,requests-toolbelt 是边读边上传。
- 其本质还是 multipart/form-data 提交数据,所以服务端代码不需要变化。
3,监听上传进度
requests-toolbelt 还提供了个监视器(MultipartEncoderMonitor),该监视器接受一个回调函数,我们可以在回调中实时跟踪进度。
2|6headers
字典是http的相关语,对应了向某个url访问时所发起的http的头字段, 可以用这个字段来定义http的访问的http头,可以用来模拟任何我们想模拟的浏览器来对url发起访问。
2|7cookies
字典或CookieJar,指的是从http中解析cookie
把cookie对象转换成字典
把cookie值转换成Python的字典形式
把Python的字典生成cookiejar形式
2|8会话维持
在requests中,如果直接利用get()或post()等方法的确可以做到模拟网页的请求,但是这实际上是相当于不同的会话,也就是说相当于你用了两个浏览器打开了不同的页面。这时候就需要采用会话。
2|9auth
元组,用来支持http认证功能
2|10timeout
用于设定超时时间, 单位为秒,当发起一个get请求时可以设置一个timeout时间, 如果在timeout时间内请求内容没有返回, 将产生一个timeout的异常。
2|11proxies
字典, 用来设置访问代理服务器。
2|12verify
当https网站,且此网站证书没有被官方CA机构信任,会出现证书验证错误的结果(您的链接不是私密链接)
开关, 用于认证SSL证书, 默认为True。(之前12306网站不是CA机构信任的。现在应该试了。)
2|13cert
当然,我们也可以制定一个本地证书用作客户端证书,这可以是单个文件(包含秘钥和证书)或一个包含两个文件路径的元组:
2|14allow_redirects
开关, 表示是否允许对url进行重定向, 默认为True。
allow_redirects=False的意义为拒绝默认的301/302/303重定向从而可以通过response.headers['Location']拿到重定向的URL。
2|15stream
开关, 指是否对获取内容进行立即下载, 默认为True。
2|16
3|0requests.get(url, params=None, **kwargs)
3|1requests.post(url, data=None, json=None, **kwargs)
3|2requests.head(url, **kwargs)
3|3requests.options(url, **kwargs)
3|4requests.put(url, data=None, **kwargs)
3|5requests.patch(url, data=None, **kwargs)
requests.patch和request.put类似。
两者不同的是: 当我们用patch时仅需要提交需要修改的字段。
而用put时,必须将所有字段一起提交到url,未提交字段将会被删除。
patch的好处是:节省网络带宽。
3|6requests.delete(url, **kwargs)
3|7requests库的异常
注意requests库有时会产生异常,比如网络连接错误、http错误异常、重定向异常、请求url超时异常等等。所以我们需要判断r.status_codes是否是200,在这里我们怎么样去捕捉异常呢?
这里我们可以利用r.raise_for_status() 语句去捕捉异常,该语句在方法内部判断r.status_code是否等于200,如果不等于,则抛出异常。
于是在这里我们有一个爬取网页的通用代码框架
4|0二、返回数据
4|12.1 内置状态码查询对象 requests.codes
具体状态码临时百度,比如200是ok,404是not_found等
4|22.2 content返回二进制抓取图片、文件
4|3
5|0三、requests的综合小实例
5|1实例一:京东商品信息的爬取
5|2实例二:亚马逊商品信息的爬取
5|3实例三:百度搜索关键字提交
5|4实例四:网络图片的爬取
__EOF__

本文链接:https://www.cnblogs.com/dongye95/p/10943304.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2018-05-29 一 网络基础之网络协议篇