日常中,我们会经常从网页上获取有用的信息,于是就用到了爬虫,今天,技术宅就手把手教你用Beautiful Soup写一个简单的爬虫!

Beautiful Soup简介

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。
Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。

安装Python和Beautiful Soup

我们使用Miniconda安装Python3

Beautiful Soup可以通过PIP安装。我们接着安装PIP

最后,我们安装Beautiful Soup及其依赖环境。

2, 分析语段

我们需要了解目标,才能够有针对性地编写程序。我们查看上述网页的源代码,找到其中任意一条出售信息所在的语段块,比如下面这个。

按照HTML标签的承继关系,我们展现出了相应的缩进,这点在后面的语段分析和爬虫编写中非常重要。观察语段,我们发现这条出售信息的所有元素包含在一个tr标签中,分为四个td标签,类名分别为img, t, tc, tc. 我们需要精准地定位到每一条信息,那么重复出现的类名为tc的两个td标签就不适合用来定位,而只出现了一次的类名为img或者是t的td标签就比较适合用来定位。

类似地,我们也可以通过含有类名t的a标签 a href=”…” class=”t” 来定位。

可以使用Beautiful Soup中的find_all()方法来找到所有满足条件的标签。

注意,由于class是Python保留字,所以我们用类名来定位的时候需要将”class”改成”class_.” 定位到了一条信息所在的语段块之后,我们就可以获取对应的信息了。假设我们需要获取下面这几个信息:出售的商品的编号,商品的标题,商品链接,图片链接,以及出售价格。

分析语段可以发现,商品链接直接包含在了我们用来定位的a标签里面,而商品编号也可以直接通过这个链接来截取。我们以records字典来储存需要获取的信息。如果find_all()后所有的结果储存在results列中,且用元素result遍历列,那么下面的方法提取了对应的商品链接和商品编号。

商品的标题包含在了这个a标签的封装之内,是标签a封装的text. 对于标签封装的text, 可以通过”.string”属性来提取。

我们再来看价格。可以发现,价格在b标签的封装之内,问题是这个b标签距离我们定位用的a标签有点远。再仔细研究标签之间的层级关系,我们发现,这个b标签的上级标签”td class = ‘tc'”是和我们定位用的a标签的上级标签”td class = ‘t'”并列的。这就给我们提供了途径tag “a” —> tag “td” —> next tag “td” —> tag “b”.

从一个标签转移到父级标签,需要使用”.parent”属性。而转移到并列的下一个标签,需要使用”.next_sibling”属性。通常情况下,需要两个”.next_sibling”联用。因此,配合刚才说过的.string, 我们可以提取商品价格了。

同样的,图片链接的上上级标签是和我们定位用的a标签的上级标签并列的,且在其之前出现。我们使用”.previous_sibling”属性将操作对象转移至上一个并列标签,通常需要两个”.previous_sibling”联用。

这样,我们获取了全部需要的信息,可以开始写爬虫了。

3, 翻页

我们再考虑翻页的问题。

上面那条链接里面一共有30条左右的商品出售,如果这个爬虫只能爬取一页的信息,那么对于我们是意义不大的。我们需要它爬取所有页面的信息。因此,让Beautiful Soup正确地找到下一页的地址并翻页显得尤为重要。

审查元素后可以发现,翻页部分的HTML代码是这样的:

于是,我们可以按照上一节的方法,用Beautiful Soup定位class=”next”的”a”标签,读取href字段的内容,从而找到下一页的链接。

其中,find()方法将返回Beautiful Soup找到的第一个对象.

然后将nextLink产生的新链接提交给Beautiful Soup进行下一页的爬取,并进行分析。

4, 其他

至此,关键部分的编写已经完成。我们仅需将这些内容封装在函数中,并编写主函数即可。爬取的结果这里将写入xlsx文件,方便处理。

全部源代码如下所示:

得到的Excel文件如下图所示:

使用Beautiful Soup写一个简单的爬虫-技术宅

以上就是爬虫的具体使用方法了!

使用Beautiful Soup写一个简单的爬虫就写到这里,文章内容参考:https://qing.su/article/140.html 。感谢香菇肥牛!

关于Beautiful Soup的更多介绍可以点击链接:https://www.baidu.com/s?wd=Beautiful+Soup&ie=utf-8