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

news2024/11/28 5:40:45
  • 订阅:新手可以订阅我的其他专栏。免费阶段订阅量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  。有了这一个工具,我们就不用写复杂的正则表达式了。我们只需要简单的语句,就可以实现我们想要的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/428690.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flume系列:Flume Source使用

目录 Apache Hadoop生态-目录汇总-持续更新 1&#xff1a;taildir source 2&#xff1a;kafka source 3&#xff1a;exec source&#xff08;tail -F&#xff09; 4&#xff1a;netcat source&#xff08;采集端口&#xff09; 5&#xff1a;spoolDir读取目录文件&#xf…

Axios请求(对ajax的二次封装)——Axios API、Axios实例、请求配置、Axios响应结构

axios起步——介绍和使用基本用例post请求场景复现核心干货axios APIaxios(config)axios(url[,config])请求方式别名axios实例创建一个axios实例axios.create([config])实例方法axios请求配置axios响应结构场景复现 最近学习与前端相关的小程序时&#xff0c;接触了异步请求ap…

医学图像配准 (Medical Image Registration)

目录 Classification Transformation Registration Algorithms Landmark Based Surfaced Based Voxel Intensity Based Information Theory Based Registration using basis functions Registration using splines Other Physics Based Registration Optimization V…

OctoClock CDA 2990

CDA 2990 CDA 2990为时钟和PPS分发设备&#xff0c;支持外部一路时钟和PPS输入&#xff0c;最高支持8路时钟和PPS输出。同时CDA 2990可选配带GPS模块版本&#xff0c;可外接GPS天线&#xff0c;支持通过GPS锁定时钟和PPS信号输出。CDA 2990主要用于多台USRP设备进行同步。 CDA…

C++之 继承 (inheritance)

目录 启示 一、基本语法 二、继承的方式 三种&#xff1a; 公共基础 / 保护继承 / 私有继承 三、继承中的对象模型 ①父类中所有非静态成员属性都会继承给子类 ②而私有成员属性同样继承过去&#xff0c;但是被编译器隐藏&#xff0c;因此无法访问 四、继承中构造和析…

2023年,送你一份最新的后端架构师知识图谱

这是一个能让你成为架构师的文章&#xff0c;请耐心读完。 为什么写这个 前几天心血来潮搜了下《后端架构师》的技术图谱。发现最新最火的文章更新时间还停留在5年前。最新的技术体系并没有罗列在内。而且文章的颗粒度特别细&#xff0c;是从数据结构和常用算法开始的。这是典…

【加餐 2】Tab 标签页管理

【加餐 2】Tab 标签页管理 对于管理系统,经常需要开启多个标签页,但是每次都需要手动去关闭,很麻烦,所以就有了这个功能,可以一键关闭所有标签页,或者关闭除当前标签页外的所有标签页,对于重要的标签页,可以进行固定至前列,方便下次快速打开。 一、实现效果 实现效…

论文浅尝 | 利用知识图谱增强的Transformer进行跨领域方面抽取

笔记整理&#xff1a;沈小力&#xff0c;东南大学硕士&#xff0c;研究方向为知识图谱链接&#xff1a;https://dl.acm.org/doi/pdf/10.1145/3511808.3557275动机情感分析是自然语言处理的基础任务&#xff0c;它包含介绍了细粒度情感分析中的一个常见任务——基于方面的情感分…

【CSS】鼠标移动到元素上方显示 / 移出盒子范围隐藏案例 ( 子绝父相 | 显示隐藏元素对象 | 鼠标经过样式设置 | 半透明遮罩设置 )

文章目录一、鼠标移动到元素上方显示 / 移出盒子范围隐藏案例要点分析1、子绝父相2、显示隐藏元素对象3、鼠标经过样式设置4、半透明遮罩设置二、代码示例一、鼠标移动到元素上方显示 / 移出盒子范围隐藏案例要点分析 1、子绝父相 这里要 在一个 div 盒子上方套一层遮罩 , 遮罩…

【原理图专题】OrCAD Capture 设计规则(DRC)检查

在原理图设计完成后,需要进行DRC检查,DRC检查能协助工程师快速检查原理图的物理、电气规则是否正确,能快速定位错误和原因。 DRC检查从Capture 工具栏中如下图红框所示的图标中Design Rules Check进入 进入后将打开DRC窗口,有四个选项卡。分别是Design Rules Options、Elec…

带你了解攻击与防护相关知识

目录 一、攻击篇 &#xff11;.什么是恶意软件&#xff1f; &#xff12;.恶意软件有哪些特征&#xff1f; 3. 恶意软件的可分为那几类&#xff1f; 4. 恶意软件的免杀技术有哪些&#xff1f; 5. 反病毒技术有哪些&#xff1f; 6. 反病毒网关的工作原理是什么&#xff1f…

java计时器

在 Java中&#xff0c;我们有一个重要的概念&#xff1a;同步和异步。同步就是 Java中的线程安全&#xff0c;异步就是 Java中的线程非安全。 在使用 JVM时&#xff0c;我们一般都是用 start &#xff08;&#xff09;方法启动一个线程&#xff0c;然后设置时间&#xff0c;比如…

Android开发中,自定义注解的两种应用方式

java注解在Android开发中主要有两种使用方式&#xff1b;一种是在程序运行期间获取类的信息进行反射调用&#xff1b;另一种是使用注解处理&#xff0c;在编译期间生成相关代码&#xff0c;然后在运行期间通过调用这些代码来实现相关功能。 我们先了解一下注解的分类和关键字 …

前端实用js dom合集

1. 整个网页变为灰色主题&#xff0c;最外层加css样式&#xff1a;filter:grayscale(1) 黑色主题&#xff1a;filter&#xff1a;invert(1) 2.js剪辑视频片段制作gif动图&#xff1a; 效果&#xff1a;点击开始就开始录制&#xff0c;点击结束右边显示生成的gif动图 生成g…

Python程序异常处理

一、什么是异常 异常就是程序运行时发生错误的信号&#xff0c;在程序由于某些原因出现错误的时候&#xff0c;若程序没有处理它&#xff0c;则会抛出异常&#xff0c;程序也的运行也会随之终止&#xff1b; 程序异常带来的问题&#xff1a; 1.程序终止&#xff0c;无法运行…

浙大数据结构(1)

开始学习数据结构(拖了好久终于开干了) 来自【浙江大学】数据结构&#xff08;合149讲&#xff09;陈越 何钦铭 Be a Fighter and Keep Fighting!!! 数据结构(data structure)定义 是计算机中存储&#xff0c;组织数据的方法。通常情况下&#xff0c;精心选择的数据结构可以带…

Chapter7-吞吐量优先的使用场景

7.1 在 Broker 端进行消息过滤 在 Broker 端进行消息过滤&#xff0c;可以减少无效消息发送到 Consumer &#xff0c;少占用网络带宽从而提高吞吐量。 Broker 端有三种方式进行消息过滤 。 7.1.1 消息的 Tag 和 Key 对一个应用来说&#xff0c;尽可能只用一个 Topic &#xff…

【数据结构学习3】线性表-链表、单链表

目录链式存储结构链表概念头结点的意义单链表的定义和表示单链表的基本操作链式存储结构 链表概念 概念 结点在存储器中的位置是任意的&#xff0c;即逻辑上相邻的数据元素在物理上不一定相邻。线性表的链式表示又称为非顺序映像或链式映像用一组物理位置任意的存储单元来存…

三公经费用泛微全过程数字化管理,使用有记录,付款有依据

公开透明是现代财政制度的重要准则和基本特征。组织要以公开、透明、科学的预算制度确定财政支出&#xff0c;贯穿预算编制、执行、监督全过程。 组织常见的费用管理——“三公”经费&#xff0c;通常指因公出国&#xff08;境&#xff09;费、公务用车购置及运行费、公务接待…

富士康转移3000亿产能,iPhone的印度产能倍增,不再“赏饭吃”

日前消息指今年三月份印度的iPhone产量已经是去年的四倍之多&#xff0c;占比将近7&#xff05;&#xff0c;显示出苹果和富士康都在加速提升印度的iPhone产能&#xff0c;凸显出他们的决心&#xff0c;这对中国制造业将带来深远影响。一、富士康对中国制造影响巨大2021年的数据…