爬虫一直是Python的一大应用场景,差不多每门语言都可以写爬虫,但是程序员们却独爱Python。之所以偏爱Python就是因为她简洁的语法,我们使用Python可以很简单的写出一个爬虫程序。本篇博客将以Python语言,用几个非常简单的例子带大家入门Python爬虫。
点此免费领取:CSDN大礼包:《python学习路线&全套学习资料》免费分享
如果把我们的因特网比作一张复杂的蜘蛛网的话,那我们的爬虫就是一个蜘,我们可以让这个蜘蛛在网上任意爬行,在网中寻找对我们有价值的“猎物”。
- 向服务器发送网络请求
- 浏览器接收并处理你的请求
- 浏览器返回你需要的数据
- 浏览器解析数据,并以网页的形式展现出来
我们可以将上面的过程类比我们的日常购物:
- 和老板说我要杯珍珠奶茶
- 老板在店里看看有没有你要的东西
- 老板拿出做奶茶的材料
- 老板将材料做成奶茶并给你
简单的爬虫就是单纯的网络请求,也可以对请求的数据进行一些简单的处理。Python提供了原生的网络请求模块urllib,还有封装版的requests模块。相比直线requests要更加方便好用,所以本文使用requests进行网络请求。
下面我们看看爬取的网站打开是什么样子的:
这就是我们熟悉的百度页面,上面看起来还是比较完整的。我们再以其它网站为例,可以就是不同的效果了,我们以CSDN为例:
首先我们需要明确一点,在爬取一些简单的网页时,我们爬取图片或者视频就是匹配出网页中包含的url信息,也就是我们说的网址。然后我们通过这个具体的url进行图片的下载,这样就完成了图片的爬取。我们有如下url:img-blog.csdnimg.cn/20200516143…,我们将这个图片url来演示下载图片的代码:
可以看到,代码和上面网页爬取是一样的,只是打开的文件后缀为jpg。实际上图片、视频、音频这种文件用二进制写入的方式比较恰当,而对应html代码这种文本信息,我们通常直接获取它的文本,获取方式为,在我们获取文本后就可以匹配其中的图片url了。我们以下列topit.pro为例:
上面我们就完成了一个网站的爬取。在匹配时我们用到了正则表达式,因为正则的内容比较多,在这里就不展开了,有兴趣的读者可以自己去了解一下,这里只说一个简单的。Python使用正则是通过re模块实现的,可以调用匹配文本中所有符合要求的字符串。该函数传入两个参数,第一个为正则表达式,第二个为要匹配的字符串,对正则不了解的话只需要知道我们使用该正则可以将图片中的src内容拿出来。
BeautifulSoup是一个用来分析XML文件和HTML文件的模块,我们前面使用正则表达式进行模式匹配,但自己写正则表达式是一个比较繁琐的过程,而且容易出错。如果我们把解析工作交给BeautifulSoup会大大减少我们的工作量,在使用之前我们先安装。
我们直接使用pip安装:
模块的导入如下:
下面我们就来看看BeautifulSoup的使用,我们用下面HTML文件测试:
上面是一个非常简答的html页面,body内包含了8个img标签,现在我们需要获取它们的src,代码如下:
解析结果如下:
正好就是我们需要的内容。
输出结果如下:
我们只爬取一个就好了,我们进入第一个网址查看源码,发现了这么一句:
其中srcUrl就包含了视频文件的网站,但是我们肯定不能自己一个网页一个网页自己找,我们可以使用正则表达式:
结果如下:
然后我们就可以下载这个视频了:
完整代码如下: