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

news/2024/6/3 16:54:00 标签: beautifulsoup, pycharm, python, 爬虫, 开发语言
  • 订阅:新手可以订阅我的其他专栏。免费阶段订阅量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这两个库。我们直接命令如下:

python">pip3 install beautifulsoup4

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

beautifulsoup4的基本用法

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

python">#导入解析包
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类的元素:

python">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)

输出:

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

python">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)

输出:

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

总结

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


http://www.niftyadmin.cn/n/223135.html

相关文章

CSS加载造成的阻塞优化

要点&#xff1a; css加载不会阻塞DOM树的解析css加载会阻塞DOM树的渲染css加载会阻塞后面js语句的执行 优化方法&#xff1a; 把CSS文件放在HTML文档的头部&#xff08;head&#xff09;中&#xff0c;避免FOUC问题。 尽可能减少使用import语句和内联样式&#xff0c;因为它…

final修饰的变量的初始化方法

一 &#xff1a;变量不是 static 变量 1.直接 例如 private final int a 1; 2.在构造器里进行初始化 private final int a; A(){//A类构造器 a 1; } 3.在代码块中进行初始化 private final int a ; { a 1; } 4.用方法进行初始化 private final int a In…

binkw32dll缺失怎么办?如何解决binkw32dll修复问题

binkw32dll缺失怎么办&#xff1f;在使用某些计算机游戏或应用程序时&#xff0c;您可能遇到过binkw32dll缺失的问题。这意味着您的计算机无法找到该DLL文件&#xff0c;从而无法正常运行程序。在本文中&#xff0c;我们将探讨binkw32.dll缺失的可能原因并提供解决方案。 一.什…

网络安全之命令执行漏洞复现

0x01 漏洞介绍 漏洞等级&#xff1a;严重 Webmin 是功能最强大的基于 Web 的 Unix 系统管理工具。管理员通过浏览器访问 Webmin 的各种管理功能并完成相应的管理动作。在版本 1.997 之前的 Webmin 中存在一个任意命令注入漏洞&#xff0c;触发该漏洞需登录 Webmin。 0x02 漏…

【二分汇总】

下面是三个模板&#xff0c;第一个是最容易理解的&#xff0c;第二三个需要背一下&#xff0c;基本满足所有二分题目 // 二分&#xff0c;查target的位置&#xff0c;最容易理解的 int bsearch_0(int[] nums, int l, int r) {while (l < r){int mid (l r) / 2;if (nums[m…

双榜加冕!加速科技荣登2023准独角兽中国未来独角兽双榜单

4月10日至11日&#xff0c;由杭州市人民政府、民建浙江省委会、中国投资发展促进会主办的第7届万物生长大会在杭州国际博览中心隆重举行。会上&#xff0c;中国投资发展促进会创投专委会、杭州市创业投资协会联合微链共同发布2023杭州市独角兽&#xff08;准独角兽&#xff09;…

【数据结构】排序习题

8.对n个元素执行快速排序&#xff0c;需要的额外空间的大小为&#xff08; &#xff09; A.O(1) B.O(n) C.O(logn) D.O(nlogn) 答案&#xff1a;C 解析: 如果是递归算法&#xff0c;由于递归调用需要额外的O(logN)栈空间&#xff0c;所递归的深度大概为二叉树的深度&#xff…

天猫数据分析软件(天猫销售数据如何查询)

俗话说得好&#xff1a;“知己知彼&#xff0c;百战不殆”。当前&#xff0c;在天猫店铺运营中&#xff0c;大家也非常注重数据分析&#xff0c;由此能够了解到竞争对手及整个行业的销售数据及销售趋势。 一、具体来讲&#xff0c;做好天猫数据分析有哪些益处呢&#xff1f; 1、…