python模块之beautifulsoup —— html文件解析以及提取
beautifulsoup简称bs4,能够帮助我们处理html等超标记文本的标签,提取其中的文字,常用于爬虫领域等。
bs4及相关模块的安装
安装bs4:
pip install bs4 -i https://pypi.tuna.tsinghua.edu.cn/simple/ # 清华源下载
安装lxml:
pip install lxml
lxml是一种编码格式,在python解释器中,一般都有默认的html编码器,但是效率较低,所以可以一并下载lxml。这些编码格式beautifulsoup解析文本时需要指定和使用。
导入bs4模块:
from bs4 import BeautifulSoup
bs4基础结构
汤对象和标签对象
创建汤对象:soup = BeautifulSoup(html_content, 'lxml')
-
第一个参数,超标记文本的文本数据
这个参数可以是str字符串,也可以是open()函数
-
第二个参数,lxml是编码解析器,还有默认的html解析器等。
汤对象拥有文本的数据属性,拥有DOM节点的定位筛选功能,筛选得到的对象我们将其认作标签对象。传入的内容,会自动将在外侧套html标签。
标签对象有一数据属性可以取到标签的类型、属性、文本等,还拥有一些方法可以判断标签是否有某种属性等,标签对象拥有__str__
方法,这个对象显示时以标签原文本显示。
汤对象方法汇总
根据标签类型查找节点
soup是汤对象,汤对象点标签名可以得到文本中的第一个对应标签,这个标签对象可以点出一些属性。
soup = BeautifulSoup('<a href="#" class="c1" >一个链接</a><a>内容</a>', 'lxml')
soup.a # 找到文本中的第一个a标签
--><a href="#" class="c1" >一个链接</a>
soup.a.name # 拿到标签的名字
-->a
soup.a.attrs # 拿到标签的所有属性和值对应的字典
-->{'href': '#', 'class': ['c1']}
find方法
特点是返回一个标签对象
soup.find('a') # 找到第一个a标签,等同于soup.a
soup.find('a', class_='c1') # 找到第一个类属性含c1的a标签
find_all方法
特点是返回一个标签对象列表,我们可以遍历列表得到标签对象逐个获得拿到标签数据。
soup = BeautifulSoup('<a href="#" class="c1" >一个链接</a><a>内容</a>', 'lxml')
soup.find_all('a')
--> [<a class="c1" href="#">一个链接</a>, <a>内容</a>]
select方法
可以按照css选择器来筛选标签,也意味着可以按照id选择、类选择器、属性选择器、组合选择器等方式筛选数据。而最终结果得到的是标签对象的列表。
soup = BeautifulSoup('<a href="#" class="c1" >一个链接</a><a href=''>内容</a>', 'lxml')
soup.select('[href="#"]')
--> [<a class="c1" href="#">一个链接</a>]
text属性
剔除所有标签,拼接所有文本数据
soup = BeautifulSoup('<a>aaa<u>hhh</u></a>', 'lxml')
soup.text
--> aaahhh
name属性
soup对象可以使用标签对象的大部分功能,但是其name属性由于不是具体的标签,所以被冠以特殊的标识[document]
。
标签对象方法汇总
属性、方法 | 含义 | 结果演示 |
---|---|---|
.name | 标签类型 | a标签对象.name --> a |
.attrs | 标签属性字典 | {'class': ['c1', 'c2'], 'href': '#'} |
.text | 标签内部文本 | 嵌套的标签也会剔除<标签>的内容,只保留文本 |
.string | 内部文本的修改入口 | tag.string = 'new'与text只读相对应 |
更多详情
以上内容是根据下文链接的文档简单总结而来:
标签:lxml,soup,python,标签,beautifulsoup,对象,html,文本,属性 From: https://www.cnblogs.com/Leethon-lizhilog/p/17052546.html