beautifulsoup库在网络爬虫中的使用技巧及应用
2019-12-10沈承放莫达隆
沈承放 莫达隆
摘要:beautifulsoup库是一个优秀的python第三方库,主要用于HTML或XML数据的解析。介绍了beautifulsoup库在python中的地位和作用,分析beautifulsoup库支持的4种解析器的使用,以及BeautifulSoup类的5种基本元素和3种节点信息的查找和获取,总结beautifulsoup库的9种目标数据的提取方法。最后通过实际案例应用指出了beautifulsoup库在解析HTML或XML数据方面简洁和强大的优秀表现。
关键词: python;beautifulsoup库;HTML;XML
中图分类号:TP311.1 文献标识码:A
文章编号:1009-3044(2019)28-0013-04
Abstract: The beautifulsoup library is an excellent Python third-party library, which is mainly used for parsing HTML or XML data. This paper introduces the position and function of beautifulsoup Library in python, analyses the use of four parsers supported by beautifulsoup library, and the search and acquisition of five basic elements and three node information of BeautifulSoup class. It summarizes nine methods of extracting target data from beautifulsoup library. Finally, it points out the excellent performance of beautifulsoup Library in parsing HTML or XML data through practical case application.
Key words: Python; beautifulsoup library; HTML; XML
1 引言
Python是一種容易上手、易读性强、免费的计算机程序设计语言,广泛应用于文本处理、网络编程和多媒体应用等多种领域,如今已经成为世界上最受欢迎的程序设计语言之一。它拥有强大且丰富的库,这使得它更加简洁、更易操作。其中beautifulsoup库是一个优秀的python第三方库,主要用于HTML或XML数据的解析,使其更具结构化和格式化,并且可以从解析后的HTML或XML数据中提取有用信息。相较于其他解析库,beautifulsoup库更加简洁、高效、功能强大,它支持多种解析器,包括python自带的解析器“html.parser”,以及第三方的lxml和html5lib等。它不仅可以解析HTML或XML数据,也可以对解析后的数据进行处理以及输出。因此在使用python解析HTML或XML数据时,beautifulsoup库已经成为最受欢迎的方法之一。
2 Beautifulsoup库的使用技巧
下面介绍用于网页设计的HTML和XML两种标记语言,以及 beautifulsoup库在解析HTML和XML数据方面的使用技巧。
2.1 HTML和XML
HTML是超文本标记语言,主要应用于网页制作,它可以包含文字、链接、图片、视频和音频等信息。HTML本质上是文本文件,需要浏览器的解析才能展现出网页的内容信息。HTML是由标签组成的一个标签树,以标签“”开始,以标签“”结束,并且有头和主体两个部分,头部分为网页的主要信息,在标签对“
”和 “”内,主体部分为网页的内容,在标签对“”和“”内。语法形式如下图。XML是可扩展标记语言,用于对电子文件的标记,并使其具有结构化特征,主要应用于数据的传输和存储,但它本身只是文本文件,需要通过编写程序才能实现传输和存储等功能。XML允许自行定义标签。在语法方面,XML是与HTML是相似的,不同的是XML标记大小写敏感,且要求所有标记必须成对出现。语法形式如下图。
2.2 beautifulsoup库
beautifulsoup库是一个优秀的python第三方库,主要用于HTML或XML格式数据的解析,使其更具结构化和格式化,并且可以从解析后的HTML或XML数据中查找、提取和修改目标信息,因此也被广泛应用于网络爬虫。通过在cmd命令行里执行“pip install beautifulsoup4”的方式进行安装,这里的beautifulsoup4是指第4版的beautifulsoup库。由于在解析HTML或XML数据时,主要用到的是beautifulsoup库中的besutifulSoup类,因此其调用方式为“from bs4 import BesutifulSoup”,其中“bs4”是beautifulsoup4库的简写,“BesutifulSoup”是beautifulsoup库的一个类型。BesutifulSoup类可以将HTML或XML数据转化为一个besutifulSoup类型,从而实现数据的解析。
Beautifulsoup库可以自行将输入的HTML或XML数据转换为“Unicode”编码,将输出的HTML或XML数据转换为“utf-8”编码,因此在使用beautifulsoup库解析数据时无须考虑数据的编码方式。
2.3 beautifulsoup库的解析器
beautifulsoup库支持4种HTML或XML的解析器,它们可以将HTML或XML数据转化为一个besutifulSoup类型,然后beautifulsoup库就可以对数据中的信息进行查找和获取等操作。下表为4种解析器的使用方法及其说明,其中“markup”表示待解析的HTML或XML数据。
[解析器 使用方法 备注 bs4 HTML解析器 BesutifulSoup(markup, 'html.parser') bs4库自有的解析器,容错能力强 lxml HTML解析器 BesutifulSoup(markup,'lxml') 需要安装lxml库,速度快 lxml XML解析器 BesutifulSoup(markup,'xml') 需要安装lxml库,唯一可以解析xml,速度快 html5lib解析器 BesutifulSoup(markup,'html5lib') 需要安装html5lib库,容错能力强,浏览器方式 ]
beautifulsoup库除了可以用以上方法创建beautifulsoup类型解析数据以外,还可以通过打开本地文件的方式,例如“soup=BeautifulSoup(open(“example.html”), 'html.parser')。
2.4 prettify()方法
prettify()方法是beautifulsoup库的一个可以将HTML和XML数据格式化输出的方法,它可以自动为每一个标签和字符串添加换行符,并将其按照缩进规则分行显示,使 HTML和XML数据更加层次化和结构化。
2.5 BeautifulSoup类的基本元素
BeautifulSoup类有5种基本元素,下表为BeautifulSoup类的基本元素及其获取方法。应用下表元素的获取方法就可以做到一些简单数据信息的查找和提取。
2.6节点的获取方法
HTML和XML都是由标签和非属性字符串等元素组成的一个标签树,由于它们之间相对位置的不同,使得它们之间必定存在着某种节点关系,其中包括子孙节点、先辈节点和兄弟节点。理解和使用标签之间的节点关系可以更好地做到批量数据的提取。下表分别对子孙节点、先辈节点和兄弟节点的获取方法进行了介绍与说明。
2.7 beautifulsoup库信息获取方法
2.7.1 常用信息获取方法介绍及说明
在对HTML或XML数据进行解析后,需要查找和提取目标信息,beautifulsoup库有8种常用的信息查找和获取方法,由于它们的查找方式和返回结果各有不同,所以可以满足各种获取要求,具体的获取方法及其说明见下表。
2.7.2 select()方法
除了前面提到的8种查找获取信息的方法外,beautifulsoup库还可以使用“select()”方法,它主要应用了css选择器方式来实现目标信息的查找与获取,以列表形式返回结果。css是层叠样式表,主要应用于网页开发。在使用select()方法时,选择对象可以是标签名字、class属性值、id属性值等,但它们都需为css形式。当选择对象是标签名字的时候,使用方式是不变的,例如“select(‘p)”;当选择对象为class属性时,需要在属性值前加“.”来表示该属性值是class属性的,例如在选择“class=title”的属性时,应采用“select(‘.title)”方式,多个属性值之间用空格分开;当选择对象为id属性时,应在属性值前加“#”,采用“select(#search_url)”方式。选择对象也可以是标签、class属性值、id属性值的组合形式,例如“select(a #search_url)”。在选择标签时也可以加上属性的信息,例如“select(p[class=title])”。在选择标签后,可以使用“get_text()”方法获取标签内的文本信息,例如“p.get_text()”就可以获得p标签内的文本信息。
3 beautifulsoup库案例应用
以“example.html”HTML文本数据为例,介绍beautifulsoup库在实际案例应用中的优秀表现。“example.html” HTML文本数据见附录。
3.1 BeautifulSoup类元素的获取
首先导入beautifulsoup库的BeautifulSoup类型,然后采用beautifulsoup库自有的解析器解析案例中的HTML数据,最后实现标签、标签名字、标签属性、字符串和注释的查找和获取。
3.2 节点的获取及其遍历
3.2.1 节点的获取
3.2.2 节点的遍历
4 结束语
beautifulsoup库支持多种HTML和XML解析器,每个解析器都有自己的特点,可以满足人们对速度和容错能力的要求。beautifulsoup库可以通过解析将HTML和XML数据转换为一个BeautifulSoup类型,并且可以对这个BeautifulSoup类型进行一些简单的处理,包括查找和获取某些元素、节点和字符串信息等。beautifulsoup库拥有多种获取目标信息的方法,可以满足不同的数据获取要求。
参考文献:
[1] 魏程程.基于Python的数据信息爬虫技术[J].电子世界,2018(11):208-209.
[2] 郭麗蓉.基于Python的网络爬虫程序设计[J].电子技术与软件工程,2017(23):248-249.
[3] 熊畅.基于Python爬虫技术的网页数据抓取与分析研究[J].数字技术与应用,2017(9):35-36.
[4] RICHARD LAWSON.用python写网络爬虫 [M].北京:人民邮电出版社,2016.
【通联编辑:梁书】