BeautifulSoup4解析数据

qyly / 2024-09-27 / 原文

BeautifulSoup4(简称bs4)和正则表达式都能处理文本,筛选数据,但它们各有优势和适用场景。在网络爬虫项目中,通常会结合两个工具适用,例如用bs4解析网页结构,然后使用正则表达式提取特定的文本内容。

bs4是用于解析html和xml文档的第3方库,它本身并不直接解析文档,而是依赖于其它解析器来完成这项工作。bs4和解析器的关系可以理解为一个接口和后端服务的关系。

首先在cmd中输入pip install bs4,或在anaconda prompt中输入conda install bs4

在cmd中输入pip show bs4pip show beautifulsoup4结果如下:

Name: bs4
Version: 0.0.2
Summary: Dummy package for Beautiful Soup (beautifulsoup4)
Home-page:
Author:
Author-email: Leonard Richardson <leonardr@segfault.org>
License: MIT License
Location: C:\Users\89660\AppData\Local\Programs\Python\Python312\Lib\site-packages
Requires: beautifulsoup4
Required-by:
-----------------------------------------------------------------------------------
Name: beautifulsoup4
Version: 4.12.3
Summary: Screen-scraping library
Home-page: https://www.crummy.com/software/BeautifulSoup/bs4/
Author:
Author-email: Leonard Richardson <leonardr@segfault.org>
License: MIT License
Location: C:\Users\89660\AppData\Local\Programs\Python\Python312\Lib\site-packages
Requires: soupsieve
Required-by: bs4

bs4处理对象的过程只包含有4种类型的对象:Tag、NavigableString、BeautifulSoup、Comment

BeautifulSoup对象是整个文档的根节点,提供了许多方便的方法来导航和搜索文档树。BeautifulSoup对象通过BeautifulSoup(html文档, 解析器)创建。

Tag是html或xml文档中的一个标签

from bs4 import BeautifulSoup
# 待解析的html文档
html = '''
    <html>
        <head>
            <title>Page Title</title>
        </head>
        <body>
            <div class="info" float='right'>
                <p class="text">A paragraph</p>
                <span>spider</span>
            </div>
        </body>
    </html>
'''
# 调用BeautifulSoup()函数,将html文档传递给指定解析器解析,并返回一个BeautifulSoup对象
soup = BeautifulSoup(html, 'html.parser')
# ----获取<title>标签----
title_tag = soup.title
print(title_tag)
# ----获取<span>标签的名称----
span_tag_name = soup.span.name
print(span_tag_name)
# ----获取标签的属性----
# 获取div标签的所有属性
attrs = soup.div.attrs
print(attrs)
# 获取div标签的单个属性
attr_class = soup.div['class']
attr_float = soup.div.get('float')
print(attr_class, attr_float)

NavigableString意为可导航字符串,NavigableString对象代表了标签(Tag)内的文本内容

可以使用Tag对象的.string属性获取标签里的文本内容,Tag对象的.strings.stripped_strings属性可以遍历标签内所有文本内容,返回的是一个迭代器,每个元素都是NavigableString对象。

Comment对象代表文档中的注释内容