python网络爬虫实战教学——requests的使用(1)

在这里插入图片描述

专栏导读

✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。

本文录入于《python网络爬虫实战教学》,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。
订阅后,可以阅读《python网络爬虫实战教学》中全部文章内容,包含python基础语法、数据结构和文件操作,科学计算,实现文件内容操作,实现数据可视化等等。
✍ 其他专栏:《数据分析案例》《机器学习案例》

😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

1、前言

我们了解了urllib库的基本用法,其中确实有不方便的地方,例如处理网页验证和Cookie时,需要写Opener类和Handler类来处理。另外实现POST、PUT等请求时的写法也不太方便。
为了更加方便地实现这些操作,产生了更为强大的库—requests。有了它,Cookie、登录验证、代理设置等操作都不是事儿。

接下来,让我们领略一下requests库的强大之处吧。

2、get请求

HTTP中最常见的请求之一就是GET请求,首先来详细了解一下利用requests库构建GET请求的方法。
下面构建一个最简单的GET请求,请求的链接为https://www.baidu.com/,该网站会判断客户
端发起的是否为GET请求,如果是,那么它将返回相应的请求信息:

import requests
res = requests.get("https://www.baidu.com/")
print(res.text)

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

可以发现,我们成功发起了GET请求,返回结果中包含请求头、URL、IP等信息。

3、抓取网页

我们以一个实例页面https://ssrl.scrape.center/作为演示,往里面加入一点提取信息的逻辑,将代码完善成如下的样子:

import requests
import re
r =requests.get('https://ssr1.scrape.center/')
pattern = re.compile(r'<h2.*?>(.*?)</h2>',re.S)  
titles =re.findall(pattern,r.text)
print(titles)

运行结果如下:

['霸王别姬 - Farewell My Concubine', '这个杀手不太冷 - Léon', '肖申克的救赎 - The Shawshank Redemption',
 '泰坦尼克号 - Titanic', '罗马假日 - Roman Holiday', '唐伯虎点秋香 - Flirting Scholar', 
 '乱世佳人 - Gone with the Wind', '喜剧之王 - The King of Comedy',
  '楚门的世界 - The Truman Show', '狮子王 - The Lion King']

这个例子中,我们用最基础的正则表达式来匹配所有的标题内容。关于正则表达式,后面会详细介绍,这里其只作为实例来配合讲解。
我们发现,这里成功提取出了所有电影标题,只需一个最基本的抓取和提取流程就完成了。

4、抓取二进制数据

在上面的例子中,我们抓取的是网站的一个页面,实际上它返回的是一个HTML文档。要是想抓取图片、音频、视频等文件,应该怎么办呢?
图片、音频、视频这些文件本质上都是由二进制码组成的,由于有特定的保存格式和对应的解析方式,我们才可以看到这些形形色色的多媒体。所以,要想抓取它们,就必须拿到它们的二进制数据。

下面以示例网站的站点图标为例来看一下:

import requests
r=requests.get('https://scrape.center/favicon.ico')
print(r.text)
print(r.content)

这里抓取的内容是站点图标,也就是浏览器中每一个标签上显示的小图标

上述实例将会打印Response对象的两个属性,一个是text,另一个是content。
下图分别是r.text和r.content的结果。

在这里插入图片描述

在这里插入图片描述

可以注意到,r.text中出现了乱码,r.content的前面带有一个b,代表这是bytes类型的数据。由于图片是二进制数据,所以前者在打印时会转化为str类型,也就是图片直接转化为字符串,理所当然会出现乱码。

上面的运行结果我们并不能看懂,它实际上是图片的二进制数据。不过没关系,我们将刚才提取到的信息保存下来就好了,代码如下:

import requests
r =requests.get('https://scrape.center/favicon.ico')
with open('favicon.ico','wb')as f:
    f.write(r.content)

这样,我们就把二进制数据成功保存成了一张图片,这个小图标被我们成功爬取下来了。
在这里插入图片描述

5、请求头

我们知道,在发起HTTP请求的时候,会有一个请求头Request Headers,那么怎么设置这个请求头呢?
很简单,使用headers参数就可以完成了。

在刚才的实例中,实际上是没有设置请求头信息的,这样的话,某些网站会发现这并不是一个由正常浏览器发起的请求,于是可能会返回异常结果,导致网页抓取失败。

要添加请求头信息,例如这里我们想添加一个User-Agent字段,就可以这么写:

import requests
headers ={
    'User-Agent':'Mozllla/5.0(Nacintosh;Intel Nac OS X 10_11_4)AppleWebKit/537.36(KHTML,like Gecko)Chrome/52.0.2743.116 Safari/537.36'
}
r=requests.get('https://ssr1.scrape.center/',headers=headers)
print(r.text)

当然,可以在这个headers参数中添加任意其他字段信息。

📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗

最近更新

  1. TCP协议是安全的吗?

    2024-03-22 16:30:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-22 16:30:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-22 16:30:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-22 16:30:05       20 阅读

热门阅读

  1. C# 读取txt文本所有行

    2024-03-22 16:30:05       18 阅读
  2. 如何使用Python自动化整理你的文件系统

    2024-03-22 16:30:05       20 阅读
  3. C++(4): std::ofstream的使用

    2024-03-22 16:30:05       17 阅读
  4. 【数据库】数据库语言

    2024-03-22 16:30:05       18 阅读