Python页面解析和数据提取bs4
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python页面解析和数据提取bs4相关的知识,希望对你有一定的参考价值。
了解bs4
bs4(Beautiful Soup)是一个可以从HTML或XML文件中提取数据的Python库
它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式
Beautiful Soup会帮你节省数小时甚至数天的工作时间
BeautifulSoup
BeautifulSoup是bs4中非常重要的一个类
它利用html或xml文件快速生一个对象
我们可以借用该对象的方法和属性快速获取我们需要的数据
用法: BeatifulSoup(html, resolver)
解析器的选择,根据不同的需求选择响应的解析器
bs4中对象的种类
首先来看一段测试代码:
import bs4
import requests
# html测试代码
#只包含一个div标签
#div中包含一个p标签,一段文本 和 一段注释
html =‘<div class="属性"><p>p标签文本</p>div中文本<!--注释代码--></div>‘
# 利用html字符串实例化BeautifulSoup对象
soup = bs4.BeautifulSoup(html,‘html.parser‘)
# 利用.div的方式访问节点
print(type(soup.div),‘--->‘,soup.div)
# 利用.class的方式访问属性
# 打印div节点中的元素和类型
for item in soup.div:
print(type(item),‘--->‘,item)
显示结果:
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构
每个节点都是Python对象
所有对象可以归纳为4种
Tag , NavigableString , BeautifulSoup , Comment .
>Tag对象
html文档中每一个标签都会在BeautifulSoup中以Tag形式出现
Tag中可以包含其他的Tag和其他部分对象
Tag具有许多的属性,可以用于访问标签或其子标签的属性和文本等
例如:
Tag.name返回标签名
Tag.string返回标签中的文本信息(Tag仅包含一个文本时,多个用strings)
Tag中的属性通过赋值修改,会改动相应html文件中标签
>NavigableString对象
Tag中的字符串用NavigableString对象来包装
作为字符串不能被直接编辑,但可以用replace()替换
在BeautifulSoup外调用需使用unicode()方法
>BeautifulSoup对象
包含一个文档的全部内容
大多数情况下可以看作是一个大的Tag对象,支持遍历和搜索文档树
>Comment 对象
Comment对象是一个特殊的NavigableString对象
用来包装文档中的注释和特殊字符串等
根据需求匹配节点或信息
find和findall方法
适用对象:Tag BeautifulSoup
find会返回满足条件的第一个节点
findall方法会以列表形式返回满足匹配条件的所有节点
Tag.find(‘a‘,) # 返回Tag中第一个a标签节点
Tag.find(‘a‘,class_="hello") # 返回Tag中第一个class为"hello"的a标签
Tag.find_all(‘p‘,text=‘p标签文本‘)
# 返回Tag中包含(string属性为‘p标签文本‘的NavigableString节点)的p标签
获取文本信息
string,strings ,text 属性和 get_text()方法
以上方法都可以用于获取文本
适用对象:
string 适用于bs4中的全体对象 (Tag BeautifulSoup NavigableString Comment)
strings ,text , get_text() 适用于 Tag BeautifulSoup
区别:
tag.strings返回一个生成器
可以迭代获取tag节点及其子孙节点中所有的NavigableString节点
返回的是每一个元素类型都是NavigebleString节点
tag.string
当tag的子节点只包含一个NavigebleString节点,返回该节点
当tag只有一个子节点时,返回该子节点的string属性的返回值
此外均返回None
tag.get_text()返回一个字符串
用于捕获该节点的所有子孙节点中的非注释文本(即NavigebleString节点的string返回值)
tag.text
在bs4源码中text是接收get_text()返回值的变量
等同于tag.get_text()
以上是关于Python页面解析和数据提取bs4的主要内容,如果未能解决你的问题,请参考以下文章