5-BeautifulSoup的使用

部署运行你感兴趣的模型镜像

【Python3网络爬虫】5-BeautifulSoup的使用

简介

BeautifulSoup最主要的功能是从网页抓取数据,Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐使用lxml 解析器。

安装

pip3 install beautifulsoup4

BeautifulSoup4主要解析器,以及优缺点:

解析器使用方法优势劣势
Python标准库BeautifulSoup(markup, “html.parser”)Python的内置标准库执行速度适中文档容错能力强Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
lxml HTML 解析器BeautifulSoup(markup, “lxml”)速度快文档容错能力强需要安装C语言库
lxml XML 解析器BeautifulSoup(markup, [“lxml”, “xml”])BeautifulSoup(markup, “xml”)速度快唯一支持XML的解析器需要安装C语言库
html5libBeautifulSoup(markup, “html5lib”)最好的容错性以浏览器的方式解析文档生成HTML5格式的文档速度慢不依赖外部扩展

注意:

lxml 和html5lib需要安装

pip install lxml
pip install html5lib

BeautifulSoup4简单使用

import bs4

import requests
from fake_useragent import UserAgent

url = 'https://www.qiushibaike.com/text/page/{}/'
headers = {
    'User-Agent': UserAgent().chrome
}


def get_data(page):
    print("正在爬取第{}页".format(page))
    response = requests.get(url.format(page), headers=headers)
    return response.text

text = get_data(1)
bs = bs4.BeautifulSoup(text, "html.parser")
# 格式化html结构
print(bs.prettify())
# 获取title标签的名称
print(bs.title)
# 获取title的name
print(bs.title.name)
# 获取title标签的内容
print(bs.title.string)
# 获取head标签的所有内容
print(bs.head)
# 获取第一个div标签中的所有内容
print(bs.div)
# 获取第一个div标签的id的值
print(bs.div["id"])
print(bs.a)
# 获取所有的a标签
print(bs.find_all("a"))
# 获取id="u1"
print(bs.find(id="u1"))
# 获取所有的a标签,并遍历打印a标签中的href的值
for item in bs.find_all("a"):
    print(item.get("href"))
# 获取所有的a标签,并遍历打印a标签中的内容
for item in bs.find_all("a"):
    print(item.get_text())

BeautifulSoup4四大对象种类

BeautifulSoup4将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment
Tag

简而言之,就是html的一个个标签

我们可以利用 soup 加标签名轻松地获取这些标签的内容,这些对象的类型是bs4.element.Tag。但是注意,它查找的是在所有内容中的第一个符合要求的标签。

对于 Tag,它有两个重要的属性,是 name 和 attrs:

# 获取title标签的名称
print(bs.title)
# 获取title的name
print(bs.title.name)
# 获取title标签的内容
print(bs.title.string)
# 获取head标签的所有内容
print(bs.head)
from bs4 import BeautifulSoup 
file = open('./aa.html', 'rb') 
html = file.read() 
bs = BeautifulSoup(html,"html.parser") 
# [document] #bs 对象本身比较特殊,它的 name 即为 [document]
print(bs.name) 
# head #对于其他内部标签,输出的值便为标签本身的名称
print(bs.head.name) 
# 在这里,我们把 a 标签的所有属性打印输出了出来,得到的类型是一个字典。
print(bs.a.attrs) 
#还可以利用get方法,传入属性的名称,二者是等价的
print(bs.a['class']) # 等价 bs.a.get('class')
# 可以对这些属性和内容等等进行修改
bs.a['class'] = "newClass"
print(bs.a) 
# 还可以对这个属性进行删除
del bs.a['class'] 
print(bs.a)
NavigableString

既然我们已经得到了标签的内容,那么问题来了,我们要想获取标签内部的文字怎么办呢?很简单,用 .string 即可

BeautifulSoup

BeautifulSoup对象表示的是一个文档的内容

Comment

Comment 对象是一个特殊类型的 NavigableString 对象

遍历文档树

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think> 首先,用户要求我提供PythonBeautifulSoup库的使用指南。我需要基于系统级指令和用户提供的引用内容来构建回答。 系统级指令: - 所有行内数学表达式使用 $...$ 格式。 - 独立公式使用 $$...$$ 格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如: [^1] 用户提供了几个引用: - [^1]: 解释了如何实例化BeautifulSoup对象。 - [^2]: 展示了如何获取tags。 - [^3]: 描述了BeautifulSoup的作用和特点。 - [^4]: 展示了如何遍历父节点。 用户的问题是:"我想获取Pythonbeautifulsoup库的使用指南 请问Pythonbeautifulsoup库的使用方法"。所以,我需要专注于使用方法的指南。 我的回答结构应该: 1. 清晰、逐步地解释BeautifulSoup使用方法。 2. 使用中文。 3. 在适当的地方添加引用标识。 4. 结尾生成相关问题。 关键点基于引用: - 实例化BeautifulSoup对象:从引用[^1],使用BeautifulSoup类的构造方法。 - 获取tags:从引用[^2],使用类似soup.title的方式。 - 作用:从引用[^3],是HTML/XML解析库,用于提取数据。 - 遍历父节点:从引用[^4],使用parents属性。 我还需要包括BeautifulSoup库的基本安装和使用步骤,因为用户询问完整的指南。 大纲: 1. **介绍BeautifulSoup**:简要解释它是什么(基于引用[^3])。 2. **安装**:如何安装BeautifulSoup库(用户未提供,但我应该包括)。 3. **导入库**:如何导入。 4. **实例化对象**:如何创建BeautifulSoup实例(基于引用[^1])。 5. **常用方法**: - 获取tags(基于引用[^2])。 - 搜索元素(如find(), find_all())。 - 遍历(如parents,基于引用[^4])。 - 修改和导航文档。 6. **示例代码**:提供一些完整示例。 7. **常见用例**:如解析HTML文档。 确保LaTeX:由于BeautifulSoup不涉及数学表达式,我可能不需要使用LaTeX,但如果有任何公式相关,我会应用。这里可能没有数学,所以可以忽略数学格式。 生成相关问题:在回答结束时,添加3-5个相关问题。 引用标识:当提到引用内容时,自然添加[^1], [^2]等。例如,当解释实例化时,添加[^1]。 完整回答结构: - 开头:介绍BeautifulSoup- 步骤1: 安装。 - 步骤2: 导入库。 - 步骤3: 实例化对象。 - 步骤4: 访问tags。 - 步骤5: 搜索和遍历。 - 步骤6: 完整示例。 - 结尾:相关问题。 使用中文:整个回答用中文书写。 </think> ### PythonBeautifulSoup库的使用指南 BeautifulSoupPython中一个强大的HTML/XML解析库,用于从网页中提取数据。它简化了文档导航、搜索和修改,自动处理编码(如Unicode转换),适用于爬虫和数据抓取场景[^3]。在本指南中,我将一步步解释其基本使用方法,涵盖安装、实例化、元素访问和常见操作。所有示例代码基于Python 3。 #### 1. **安装BeautifulSoup库** 在开始前,需要安装BeautifulSoup和其依赖库。推荐使用pip命令安装: ```bash pip install beautifulsoup4 ``` 同时,为高效解析文档,建议安装一个解析器库(如lxml或html.parser): ```bash pip install lxml # 高性能解析器 ``` #### 2. **导入库和解析文档** 首先,导入BeautifulSoup库,并加载HTML文档内容(可以是字符串或文件)。 ```python from bs4 import BeautifulSoup # 示例HTML字符串(可以从文件或网络请求获取) html_doc = """ <html><head><title>示例页面</title></head> <body> <p class="intro">欢迎使用BeautifulSoup。</p> <a href="https://example.com">链接</a> </body></html> """ # 步骤3: 实例化BeautifulSoup对象(基于引用[^1]) soup = BeautifulSoup(html_doc, &#39;html.parser&#39;) # 使用html.parser解析器 ``` - **关键点**:BeautifulSoup类的构造方法接受两个参数:HTML文档字符串和解析器类型(如`&#39;html.parser&#39;`、`&#39;lxml&#39;`)。这类似于自定义类的实例化过程,传入文档内容和解析器选项[^1]。 #### 3. **访问和提取HTML元素(Tags)** BeautifulSoup允许直接访问文档中的标签(tags),类似于字典或属性操作。 - **获取单个标签**:使用点号`.`访问标签名(如`soup.title`)[^2]。 ```python title_tag = soup.title # 获取<title>标签 print(title_tag) # 输出: <title>示例页面</title> print(title_tag.text) # 输出标签文本: &#39;示例页面&#39; ``` - **获取特定属性**:标签对象支持属性访问(如`href`)。 ```python a_tag = soup.a # 获取第一个<a>标签 print(a_tag[&#39;href&#39;]) # 输出: &#39;https://example.com&#39; ``` - **获取多个标签**:使用`find_all()`方法搜索所有匹配标签。 ```python all_p_tags = soup.find_all(&#39;p&#39;) # 获取所有<p>标签 for p in all_p_tags: print(p.text) # 输出: &#39;欢迎使用BeautifulSoup。&#39; ``` #### 4. **搜索和遍历文档结构** BeautifulSoup提供多种方法导航文档树,包括父子关系、兄弟节点等。 - **遍历父节点**:使用`.parent`或`.parents`属性遍历祖先元素(基于引用[^4])。 ```python a_tag = soup.a for parent in a_tag.parents: # 迭代所有父节点 if parent is not None: print(parent.name) # 输出: &#39;body&#39;, &#39;html&#39;, 等 else: print("无父节点") ``` - **搜索条件**:结合CSS选择器或属性过滤。 ```python # 搜索class为"intro"的<p>标签 intro_p = soup.find(&#39;p&#39;, class_=&#39;intro&#39;) print(intro_p.text) # 输出: &#39;欢迎使用BeautifulSoup。&#39; ``` - **兄弟节点**:使用`.next_sibling`或`.previous_sibling`。 #### 5. **完整示例:解析简单HTML** 以下是一个端到端示例,演示从HTML提取数据。 ```python from bs4 import BeautifulSoup html = """ <div class="content"> <h1>标题</h1> <ul> <li>项目1</li> <li>项目2</li> </ul> </div> """ soup = BeautifulSoup(html, &#39;html.parser&#39;) # 提取标题和列表项 header = soup.h1.text list_items = [li.text for li in soup.find_all(&#39;li&#39;)] print(f"标题: {header}") # 输出: &#39;标题&#39; print(f"列表项: {list_items}") # 输出: [&#39;项目1&#39;, &#39;项目2&#39;] ``` #### 6. **最佳实践和注意事项** - **编码处理**:BeautifulSoup自动转换输入文档为Unicode,输出为utf-8,无需手动编码[^3]。 - **性能建议**:对于大型文档,使用`lxml`解析器(比`html.parser`更快);避免频繁搜索,优先用`find_all`批量处理。 - **错误处理**:在访问标签属性时,检查是否存在(如使用`get()`方法)。 ```python img_src = soup.img.get(&#39;src&#39;, &#39;默认值&#39;) # 安全获取属性 ``` BeautifulSoup因其简单性和灵活性,广泛应用于网页抓取、数据清洗和API交互中[^3]。如果您需要更多高级功能(如修改文档),请参考官方文档。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值