文章目录
- 专栏导读
- 1、前言
- 2、get请求
- 3、抓取网页
- 4、抓取二进制数据
- 5、请求头
专栏导读
✍ 作者简介: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博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗