网页音频抓取 基本请求库requests

优采云 发布时间: 2022-05-03 14:54

  网页音频抓取 基本请求库requests

  本人是崔庆才技术粉一枚并且本文仅是学习总结,案例网站使用的是崔庆才的爬虫练习网站,有想了解的可参考下面崔庆才的个人站点链接学习。

  崔庆才的个人站点:

  概述

  今天对基本请求库requests来进行总结。之前学习了urllib库的基本用法,事实上在使用的过程中,urllib库还是有很多不方便的地方的,例如在进行设置代理、网页验证以及操作Cookies时都需要使用Opener和Handler类来进行处理,而requests请求库在进行这些操作时则更为简便,那么让我们一起来看一下requests的强大之处吧。

  安装

  安装过程较为简单,我们在命令行中运行以下命令,即可完成requests库的安装。

  pip install requests或pip3 install requests

  发起请求

  我们通过requests库可以很容易地发起各种类型的请求操作,本例使用httpbin作为测试案例,具体代码如下所示。

  import requests<br /># 发起Get请求requests.get("https://www.httpbin.org/get")# 发起Post请求requests.post("https://www.httpbin.org/post")# 发起Put请求requests.put("https://www.httpbin.org/put")# 发起Delete请求requests.delete("https://www.httpbin.org/delete")

  网页抓取

  我们在进行网页抓取的过程中,响应结果的返回格式大致分为三种形式,即字符串格式的HTML代码、JSON字符串、二进制数据流,下面我们依次来进行介绍。

  1、首先第一种:字符串格式的HTML。这是最常见的一种响应格式,我们调用Response中的text属性即可拿到字符串格式的响应结果。对于这种情况我们可以使用正则表达式来进行内容匹配,也可以使用pyquery、beautifulsoup、xpath等第三方解析库来进行内容提取,下面我们就以百度作为案例看看效果,至于如何使用正则以及第三方库进行解析,我们后续进行详细讲解。

  import requests<br />response = requests.get("https://www.baidu.com/")# 打印响应结果print(response.text)

  运行结果如下:

  

  2、接着第二种:JSON字符串。有时我们请求过来的结果是类似的与JSON格式的字符串,对于这种情况我们有两种处理方式。一种是直接调用Response的json方法将其转换成json格式,另外一种是使用JSON库中的loads方法将字符串转换成json格式,示例如下。

  import requests<br />response = requests.get('https://www.httpbin.org/get')# 转换成json格式输出print(response.json())

  上面我们通过Response类中的json方法来对json格式的字符串进行解析,下面我们使用Python内置的json库来对json字符串来进行解析,示例如下。

  import jsonimport requests<br />response = requests.get('https://www.httpbin.org/get')# 转换成json格式输出json_text = json.loads(response.text)print(json_text)

  运行结果如下:

  

  3、最后第一种:二进制数据流。当我们想要抓取一些图片、音频以及视频文件时,这时我们得到的响应结果就不再是普通的字符串了,而是二进制数据流。我们直接调用response中的content属性就可以获取到这些二进制流,再使用读写操作就可以轻松保存这些二进制文件,实例如下。

  import requests<br />response = requests.get('https://dss1.bdstatic.com/kvoZeXSm1A5BphGlnYG/skin_zoom/12.jpg?2')# 输出响应结果print(response.content)

  运行结果如下:

  

  添加请求头

  在我们发起http请求时都会有个RequestHeaders,有些请求必须要加上特定的请求头才会给你返回响应结果,否则你是拿不到有用的响应信息的,但是我们如何为自己发起的请求加上请求头呢?requests库中的每个请求方法都会有一个headers参数,我们只要为其赋值即可,示例如下。

  import requests<br /># 定义请求头headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36"}<br /># 发起请求并设置headers参数response = requests.get('https://www.httpbin.org/get', headers=headers)print(response.text)

  运行结果如下:

  

  传递参数

  如果一个请求想要传递参数信息,可以使用params参数,为params参数赋值即可,示例如下。

  import requests<br />data = { "name": "LiYang", "age": 22}response = requests.get('https://httpbin.org/get', params=data)print(response.text)

  结果如下:

  

  接收响应

  从上文我们知道,当把请求发送之后,我们可以调用text或者content来拿到响应内容,但是除此之外,Response类中还有很多属性和方法来获取当前请求的其他信息。例如:请求状态码、响应头、Cookie等。示例如下。

  import requests<br />response = requests.get('https://www.baidu.com/')# 打印状态码print(response.status_code)# 打印请求头print(response.headers)# 打印请求链接print(response.url)# 打印请求历史print(response.history)

  文件上传

  requests库可以模拟提交一些数据,例如网站上需要上传文件,也可以用它来实现。我们只需要在调用post请求方法时传入files参数即可,示例如下。

  import requests<br />files = { 'file': open('desktop.png', 'rb')}response = requests.post('https://www.httpbin.org/post', files=files)# 打印状态码print(response.text)

  Cookie设置

  我们之前使用urllib处理Cookie时还需要借助Opener以及Handler来实现。现在使用requests来处理Cookie就变得异常简单了,下面我们来看如何获取Cookie,示例如下。

  import requests<br />response = requests.get('https://www.baidu.com/')print(response.cookies)for key, value in response.cookies.items(): print(key + '=' + value)

  我们已经知道如何获取Cookie中的条目,但是我们如何手动设置Cookie呢?这时我们就用到了requests库中的RequestsCookieJar找个类,具体使用示例如下。

  import requestsfrom requests.cookies import RequestsCookieJar<br /># 模拟一段要插入的cookies信息cookies = 'name=LiYang;age=22;pet=xiaDongHao'<br /># 创建CookieJar对象cookieJar = RequestsCookieJar()for cookie in cookies.split(";"): key, value = cookie.split("=", 1) cookieJar.set(key, value)# 发起请求response = requests.get('https://www.httpbin.org/cookies/set', cookies=cookieJar)print(response.text)

  Session维持

  我们直接调用requests中的请求方法(Get/Post)确实可以模拟网页请求,但是这两种方法事实上是两个不同的session,也就是说用两个浏览器打开了不同的页面,这两个操作是完全独立的,他们之间不能进行信息的交互(即相当于每次调用get方法或者post方法相当于又开启了一个浏览器来请求页面)。在requests库中,官方为我们提供了Session对象,它可以帮我们处理掉session维护的问题。说了这么多,我们来进行一个对比,具体示例如下。

  import requests<br /># 先设置cookierequests.get('https://www.httpbin.org/cookies/set/name/ly')# 再读取cookieresponse = requests.get('https://www.httpbin.org/cookies')print(response.text)

  结果如下:

  

  下面我们通过维持一个session来发出一个请求,看看与上面的普通请求的不同之处,是否真的能够获取到我们发第一次请求设置的cookie值。

  import requests<br />session = requests.Session()# 先设置cookiesession.get('https://www.httpbin.org/cookies/set/name/ly')# 再读取cookieresponse = session.get('https://www.httpbin.org/cookies')print(response.text)

  结果如下:

  

  通过对比可以发现我们在发出请求前设置的cookie被我们获取到了,这就是维持同一个Session和不同Session之间的区别。

  SSL证书验证

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线