Python beautifulsoup4解析 数据提取 基本使用

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 文章目录Python beautifulsoup4解析 数据提取 使用介绍&常用示例前言二、from bs4 import BeautifulSoup1.pip install beautifulsoup42.Beautiful用法介绍2.1 解析html源码创建创建Beautifulsoup对象2.2 beautiful对象的常用属性和方法2.3 find、find_all、CSS选择器 根据条件提取元素3.常用代码4.对象类型介绍总结

Python beautifulsoup4解析 数据提取 使用介绍&常用示例

文章目录

前言

二、from bs4 import BeautifulSoup

1.pip install beautifulsoup4

2.Beautiful用法介绍

2.1 解析html源码创建创建Beautifulsoup对象

2.2 beautiful对象的常用属性和方法

2.3 find、find_all、CSS选择器 根据条件提取元素

3.常用代码

4.对象类型介绍

总结

前言

Beautiful Soup是Python的一个网页解析库,处理快捷; 支持多种解析器,功能强大。教程细致讲解Beautiful Soup的深入使用、节点选择器、CSS选择器、Beautiful Soup4的方法选择器等重要知识点,是学好爬虫的基础课程。


提示:以下是本篇文章正文内容,下面案例可供参考
建议把代码复制到编译工具中运行跑几次,认真看一下输出结果方便更好的理解, beautifulsoup4=4.11.1

二、from bs4 import BeautifulSoup

1.pip install beautifulsoup4

pip install beautifulsoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple

2.Beautiful用法介绍

2.1 解析html源码创建创建Beautifulsoup对象

from bs4 import BeautifulSoup
web_html = """
<html>
<head>
    <title id="title">The Dormouse's story1</title>
</head>
<body>
    <p class="story">
        <a href="http://example.com/elsie1" class="link11" id="link1">EXI-XZ</a>,
        <a href="http://example.com/elsie2" class="link11" id="link2">Elsie</a>,
        <a href="http://example.com/lacie" class="link22" id="link3">Lacie</a> and
        <a href="http://example.com/tillie" class="link33" id="link4">Tillie</a>;
    </p>
    <ul class="ul_test", id="abc">
        <li class="li_test" href="http://example.com/li">AA</li>
        <li class="li_test" href="http://example.com/li">BB</li>
        <li class="li_test" href="http://example.com/li">CC</li>
    </ul>
    <div class="div_test">
        <p>div模块-p标签</p>
    </div>
</body>
</html>
"""
soup = BeautifulSoup(web_html, 'lxml')  # 解析网页源码创建Beautifulsoup对象 

2.2 beautiful对象的常用属性和方法

web_html = soup.prettify()  # 返回格式化后的源码,str类型
title_tag = soup.title  # 返回源码中第一个title标签(源码),element.Tag类型
print('title_tag:', title_tag, type(title_tag))
title_content = soup.title.string  # 提取title标签的文本, element.NavigableString,下面有多个标签内容则返回None
print('title_content:', title_content, type(title_content))
all_p_content = soup.body.get_text()  # 提取body下面的所有p标签,str类型
print('all_p_content:', all_p_content, type(all_p_content))
a_href = soup.a['href']  # 提取第一个a标签的href属性,str类型
print("a_href:", a_href, type(a_href))

2.3 find、find_all、CSS选择器 根据条件提取元素

# find -- 返回符合查询条件的第一个标签
# 组合条件一
find_group_result = soup.find(name='a', string='EXI-XZ')  # name(标签名),string(标签的文本),element.Tag类型
print('find_group_result:', find_group_result, type(find_group_result))
# 组合条件二,推荐第二种方式,字典方式key,value
find_attrs_result = soup.find(attrs={'class': 'link11', 'id': 'link1'})  # 指定属性,element.Tag类型,
print('find_attrs_result:', find_attrs_result, type(find_attrs_result))
find_attrs_result.get('href')  # 获取该对象的属性href
find_attrs_result.text  # 获取该对象标签的文本,不同于find_attrs_result.string,下面有多个标签会全部返回而不是None
find_ul_result = soup.find(attrs={'class': "ul_test", 'id': 'abc'})
print('ul_tag_result:', find_ul_result.text, type(find_ul_result))  # element.Tag

# find_all -- 返回符合查询条件的所有标签, list类型
find_li_list = soup.find_all(name='li', attrs={'class': "li_test"}, limit=2)  # limit(返回前两个标签)
find_li_list[0].attrs  # 提取标签的所有属性

# CSS选择器 -- list类型
div_tag = soup.select('div,.div_test')  # 取class为"div_test"的div标签,list类型,  #=id   .=class
print('div_tag:', div_tag, type(div_tag))
div_tag = soup.select('div[class="div_test"]')  # 等同于soup.select('div,.div_test')
print('div_tag:', div_tag, type(div_tag))
print("div下p标签的文本:", div_tag[0].select("p")[0].text)  # 取div中的第一个p标签的文本

3.常用代码

import requests
from bs4 import BeautifulSoup
url = "xxxxxxxxxxxxxxxxx"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'}
response = requests.get(url=url, headers=headers)
web_html = response.text
soup = BeautifulSoup(web_html, 'lxml')  # 解析网页源码创建Beautifulsoup对象

4.对象类型介绍

BeautifulSoup4四大对象种类
bs4.element.Tag 通俗点讲就是HTML中的一个个标签,有很多属性和方法可以更加详细的提取内容
NavigableString 得到了标签源码,通过对象的属性和方法可以提取标签内部文字(.string)和属性(xx['class'])
BeautifulSoup 表示一个文档的全部内容.
Comment 一个特殊类型的NavigableString对象,其输出的内容不包括注释符号。

总结

小洲提示:建议把代码复制到编译工具中运行跑几次,认真看一下输出结果方便更好的理解, beautifulsoup4=4.11.1

以上就是今天要讲的内容,本文仅仅简单介绍了beautifulsoup4解析web源码的使用,而beautifulsoup4提供了大量能使我们快速便捷地处理数据的函数和方法,后续有关于beautifulsoup4的常用代码会在这篇博客中持续更新。
Beautifulsoup4官方文档:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

目录
相关文章
|
29天前
|
算法 Python
Python 大神修炼手册:图的深度优先&广度优先遍历,深入骨髓的解析
在 Python 编程中,掌握图的深度优先遍历(DFS)和广度优先遍历(BFS)是进阶的关键。这两种算法不仅理论重要,还能解决实际问题。本文介绍了图的基本概念、邻接表表示方法,并给出了 DFS 和 BFS 的 Python 实现代码示例,帮助读者深入理解并应用这些算法。
36 2
|
29天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
27 1
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
1月前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
48 2
|
1月前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
109 1
|
1月前
|
测试技术 开发者 Python
深入浅出:Python中的装饰器解析与应用###
【10月更文挑战第22天】 本文将带你走进Python装饰器的世界,揭示其背后的魔法。我们将一起探索装饰器的定义、工作原理、常见用法以及如何自定义装饰器,让你的代码更加简洁高效。无论你是Python新手还是有一定经验的开发者,相信这篇文章都能为你带来新的启发和收获。 ###
27 1
|
1月前
|
设计模式 测试技术 开发者
Python中的装饰器深度解析
【10月更文挑战第24天】在Python的世界中,装饰器是那些能够为函数或类“添彩”的魔法工具。本文将带你深入理解装饰器的概念、工作原理以及如何自定义装饰器,让你的代码更加优雅和高效。
|
20天前
|
数据采集 存储 自然语言处理
基于Qwen2.5的大规模ESG数据解析与趋势分析多Agent系统设计
2022年中国上市企业ESG报告数据集,涵盖制造、能源、金融、科技等行业,通过Qwen2.5大模型实现报告自动收集、解析、清洗及可视化生成,支持单/多Agent场景,大幅提升ESG数据分析效率与自动化水平。
|
29天前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
31 0