> 文章列表 > 〖Python网络爬虫实战⑭〗- BeautifulSoup详讲

〖Python网络爬虫实战⑭〗- BeautifulSoup详讲

〖Python网络爬虫实战⑭〗- BeautifulSoup详讲

  • 订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+

                python项目实战

                Python编程基础教程系列(零基础小白搬砖逆袭)

  • 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,可报销(名额有限,先到先得)
  • 作者:爱吃饼干的小白鼠。Python领域优质创作者,2022年度博客新星top100入围,荣获多家平台专家称号。

 最近更新

〖Python网络爬虫实战⑫〗- XPATH语法介绍

〖Python网络爬虫实战⑬〗- XPATH实战案例

⭐️🌟 ✨

上节回顾

        前面我们简单介绍了XPath的语法,和xpath的相关实战案例,通过具体的案例来学习XPath语法。xpath最大的难点就是如何写下path后面的语法,我们要找到对应的节点,就可以了。

BeautifulSoup详讲

        前面,我们介绍了正则表达式的相关语法,我们知道我们正则表达式写的有问题,就无法匹配数据。我们知道每一个网页有着特殊的结构,我们可以借助他们的节点及属性来提取数据。本文,我们就来介绍一个强大的解析工具——BeautifulSoup  。有了这一个工具,我们就不用写复杂的正则表达式了。我们只需要简单的语句,就可以实现我们想要的数据。

BeautifulSoup介绍

        BeautifulSoup 是一个用于解析和生成 HTML,XML 和其他网页的 Python 库。它可以用于爬取,解析和提取网页内容,并能够通过转换器实现惯用的文档导航、查找、修改文档的方式。

        BeautifulSoup是一个用Python编写的库,用于解析HTML和XML文档,并提取其中的数据。它是一个简单易用的工具,可以提高从HTML和XML文档中提取数据的效率。

        BeautifulSoup使用正则表达式和re模块来解析HTML和XML文档。它支持各种类型的标签,例如<div><p><a><ul>等,并可以使用attrs属性来解析元素的属性。BeautifulSoup还支持各种元素类型,例如<h1><h2><h3><h4><h5><h6>等。

        BeautifulSoup还提供了许多其他有用的功能,例如解析表单、提取列表和表格、解析多行文本等。它还支持多种文档类型,例如HTML、XML和JSON。

准备工作

        在开始之前,我们需要安装好BeautifulSoup和lxml这两个库。我们直接命令如下:

pip3 install beautifulsoup4

这两个库安装完成之后,就可以开始我们的学习了。

beautifulsoup4的基本用法

        首先我们创建一个BS4 解析对象,这非常地简单,语法格式如下所示:

#导入解析包
from bs4 import BeautifulSoup
#创建beautifulsoup解析对象
soup = BeautifulSoup(html, 'lxml') # html 表示要解析的文档,而 lxml 表示解析文档时所用的解析器,此处的解析器也可以是 'xml' 或者 'html5lib'#prettify()用于格式化输出html/xml文档
print(soup.prettify())

        我们通过一个简单的案例,来看看其的用法。

<html>  <head>  <title>Example Page</title>  </head>  <body>  <h1>Welcome to the Example Page</h1>  <p>This is an example page.</p>  <ul>  <li>Item 1</li>  <li>Item 2</li>  <li>Item 3</li>  </ul>  </body>  
</html>

        这是一个简单的HTML文档,其中包含一个标题、一个段落和一个无序列表。使用BeautifulSoup解析器解析HTML文档时,可以使用BeautifulSoup()函数创建一个BeautifulSoup对象,并使用BeautifulSoup()函数指定解析器。在这个例子中,我们使用BeautifulSoup()函数指定解析器为lxml,这是一个用于解析XML文档的Python解析器。

提取信息

我们接下来介绍如何获取节点名称,如何获取属性值。我们梳理一下信息的提取方式。

获取名称

        利用name属性可以获取节点的名称。还是以上面的文本为例,先选取title节点,再调用name属性就可以得到节点名称:

print(soup.title.name)

获取属性

        一个节点可能有多个属性,例如 id和class等,选择这个节点元素后,可以调用attrs获取其所有属性:

print(soup.p.attrs)
print(soup.p.attrs[ ' name' ])

方法选择器

        前面讲的选择方法都是基于属性来选择的,这种方法虽然快,但是在进行比较复杂的选择时,会
变得比较烦琐,不够灵活。幸好,Beautiful Soup还为我们提供了一些查询方法,例如find_all和
find等,调用这些方法,然后传入相应的参数,就可以灵活查询了。

  • find_all

        find all,顾名思义就是查询所有符合条件的元素,可以给它传入一些属性或文本来得到符合条件的元素,功能十分强大。它的API 如下:

find all(name , attrs , recursive , text ,kwargs)
  • find()

        除了find_all方法,还有find方法也可以查询符合条件的元素,只不过find方法返回的是单个元素、也就是第一个匹配的元素,而find_all会返回由所有匹配的元素组成的列表。实例如下:

find all(name , attrs , recursive , text ,kwargs)

CSS选择器

        Beautiful Soup还提供了另外一种选择器——CSS选择器。如果你熟悉Web开发,那么肯定对CSS选择器不陌生。

        使用CSS选择器,只需要调用select方法、传入相应的CSS选择器即可。我们用一个实例感受一下。

  • 使用CSS选择器查找所有具有名为“class_name”的CSS类的元素:

from bs4 import BeautifulSoup  html = """  
<html>  <head>  <style>  .element-with-class-name {  display: inline-block;  margin-right: 10px;  }  </style>  </head>  <body>  <div class="element-with-class-name"></div>  <div id="element-with-class-name"></div>  <div class="element-with-class-name"></div>  </body>  
</html>  
"""  soup = BeautifulSoup(html, "html.parser")  
elements = soup.find_all(".element-with-class-name")  
print(elements)

输出:

[<div class="element-with-class-name"></div>, <div id="element-with-class-name"></div>, <div class="element-with-class-name"></div>]
  • 使用类名选择器查找具有特定类名的元素:

from bs4 import BeautifulSoup  html = """  
<html>  <head>  <style>  .element-with-class-name {  display: inline-block;  margin-right: 10px;  }  </style>  </head>  <body>  <div class="element-with-class-name"></div>  <div id="element-with-class-name"></div>  <div class="element-with-class-name"></div>  </body>  
</html>  
"""  soup = BeautifulSoup(html, "html.parser")  
elements = soup.find_all(".element-with-class-name")  
print(elements)

输出:

[<div class="element-with-class-name"></div>, <div id="element-with-class-name"></div>, <div class="element-with-class-name"></div>]

总结

        本文,我们就来介绍一个强大的解析工具——BeautifulSoup  。有了这一个工具,我们就不用写复杂的正则表达式了。我们只需要简单的语句,就可以实现我们想要的数据。