Python爬虫之BeautifulSoup详解

news/2025/1/13 5:58:10/

Beautiful Soup(以下简称BS)是Python中最为流行的HTML和XML解析库之一。它的主要目的是从HTML或XML中提取数据。相比于Python内置的HTML解析库,BS提供了更加简单易用的API,使得编写爬虫或者数据清洗的工作更加高效、简单。

1.安装

BS是Python的第三方库,可以使用pip在命令行中安装:

pip install beautifulsoup4

2.解析器

BS支持多种解析器,但大体上分为两类:

  • Python标准库的解析器

    Python标准库中提供的XML解析器(xml.parser)和HTML解析器(html.parser)。这两种解析器都是基于Python的内置库,因此无需额外安装。

  • 第三方解析器

    BS通过扩展Python标准库的解析器,还支持其他的第三方解析器,如lxml、html5lib等。这些解析器通常需要安装相应的库,如lxml库、html5lib库等。

3.基本用法

使用BS进行HTML解析的基本步骤如下:

  • 引入库:在Python文件中使用BS,首先需要引入库,如下所示:
from bs4 import BeautifulSoup

  • 创建对象:创建一个BeautifulSoup对象,解析需要解析的HTML或XML文本。
html_doc = """
<!DOCTYPE html>
<html>
<head><title>Example HTML Document</title>
</head>
<body><h1>Heading 1</h1><div class="container"><p class="text">This is a paragraph.</p><a href="http://www.example.com">This is a link.</a><p class="text">This is another paragraph.</p></div>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')

这里,我们首先定义一个HTML文档,然后将其作为参数传递给BeautifulSoup构造函数,同时还需要指定解析器,这里使用Python的HTML解析器(html.parser)。

  • 解析文本:BeautifulSoup对象会将HTML解析成一颗DOM树,我们可以通过一些方法来获取它的元素,如下所示:
soup.title  # 获取HTML页面的title
soup.title.string  # 获取title标签的文本内容
soup.a  # 获取HTML页面中的第一个a标签
soup.find_all('a')  # 获取HTML页面中所有的a标签

4.标签选择器

BS提供了多种方法来选择HTML文档中的标签。最常用的方法是使用标签名来选择标签。

soup.a  # 获取HTML页面中的第一个a标签
soup.find_all('a')  # 获取HTML页面中所有的a标签

上面这两个方法都只能获取a标签的第一个实例。如果想获取所有a标签的文本内容,可以使用下面的代码:

for link in soup.find_all('a'):print(link.get('href'))

在find_all函数中传递标签名作为参数,就可以获取HTML页面中所有的该标签实例。另外,可以通过指定属性来筛选标签。如果需要找到所有class="text"的标签,可以使用下面的代码:

for tag in soup.find_all(class_='text'):print(tag.name, tag.text)

5.CSS选择器

除了标签选择器之外,BS还支持使用CSS选择器来选择HTML文档中的元素。可以在方法中传递一个CSS选择器的字符串作为参数,如下所示:

# 获取class="text"的p标签
soup.select('p.text')# 获取class="container"下的所有标签
soup.select('.container *')# 获取a标签中包含example.com字符串的标签
soup.select('a[href*="example.com"]')

6.API

除了上述方法之外,BS还提供了其他一些常用的API,如下所示:

  • get_text()

    get_text()函数可以用来获取标签内的文本内容,它将返回一个字符串。

tag = soup.find('p')
print(tag.get_text())

  • get()

    get()函数可以用来获取标签的属性值,它接受一个属性名作为参数,将返回该属性的值。

tag = soup.find('a')
print(tag.get('href'))

  • attrs

    attrs属性是一个字典,包含了标签的所有属性名和属性值。

tag = soup.find('a')
print(tag.attrs)

  • contents

    contents属性是标签的子节点列表,包括字符串和其他标签。

tag = soup.find('div')
print(tag.contents)

  • parent

    parent属性是标签的父节点,如果没有父节点则返回None。

tag = soup.find('p')
print(tag.parent.name)

7.总结

BS是Python中一款非常流行的HTML和XML解析库,其提供了简单易用的API和丰富的功能,使得我们可以快速地对HTML文档进行解析和数据提取。掌握BS的基本用法和常用API可以帮助我们更加高效地开发爬虫、数据清洗和数据分析等工作。


http://www.ppmy.cn/news/80494.html

相关文章

es 三 安装 es 安装kibana

目录 安装7.3.0 版本 下载地址 一个比一个快 页面测试访问 安装kibana 下载 Config/kibana.yml 配置修改开启中文 页面访问 安装7.3.0 版本 下载地址 一个比一个快 Index of /elasticsearch/ 下载中心 - Elastic 中文社区 下载中心 - Elastic 中文社区 官网下载 开箱…

原来CSS的登录界面可以变得这么好看

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大一在校生&#xff0c;web前端开发专业 &#x1f921; 个人主页&#xff1a;几何小超 &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目…

Linux命令(19)之userdel

Linux命令之userdel 1.userdel介绍 userdel命令用来说删除useradd命令创建的Linux账户。 useradd创建用户&#xff1a; Linux命令(15)之useradd_小黑要上天的博客-CSDN博客 2.userdel用法 userdel [参数] [用户账户名称] userdel常用参数 参数说明-r递归删除&#xff0c;…

Jsp网上书店系统(源代码+论文)

JAVA语言是目前Internet上大型的WEB应用程序开发时使用得最热门的编程语言,本文描述了JAVA和JSP技术的特点以及在互联网上的使用情况,介绍这两种技术的重要编程方法和两者之关的联系,同时也会应用相关的Struts框架,并完成一个基于这种技术的网上书店系统。 第一章 JAVA的网…

GPC_APDU_Transport_over_SPI-I2C_v1.0_PublicRelease

GPC_APDU_Transport_over_SPI-I2C_v1.0_PublicRelease.pdf 目录 1 简介 越来越多的设备&#xff0c;如移动设备、可穿戴设备或其他 IoT&#xff08;物联网&#xff09;设备现在正在使用焊接安全元件 (SE)。 这产生了支持 SPI 或 I2C 等物理接口的新需求&#xff0c;以代替以前…

仿牛客社区——开发社区搜索功能

实现功能 • 搜索服务 - 将帖子保存至Elasticsearch服务器。 - 从Elasticsearch服务器删除帖子。 - 从Elasticsearch服务器搜索帖子。 • 发布事件 - 发布帖子时&#xff0c;将帖子异步的提交到Elasticsearch服务器。 - 增加评论时&#xff0c;将帖子异步的提交到Elasti…

2023/5/24

四种权限修饰符 priavte(私有的)&#xff1a; default(缺省):它是针对本包访问而设计的&#xff0c;任何处于本包下的类、接口、异常等&#xff0c;都可以相互访问。 protected(受保护的):​ 当前类或子类可以访问&#xff0c;同时相同包内的其他类也可以访问protected成员&…

C++指针与引用

目录 一 指针 二 引用 一 指针 指针是一个变量,其值为另一个变量的内存位置的直接地址。在使用指针存储其他变量地址之前,需要指针进行行声明。 每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。…