python bs4_Python页面解析和数据提取【bs4】

了解bs4

bs4(Beautiful Soup)是一个可以从HTML或XML文件中提取数据的Python库

它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式

Beautiful Soup会帮你节省数小时甚至数天的工作时间

BeautifulSoup

BeautifulSoup是bs4中非常重要的一个类

它利用html或xml文件快速生一个对象

我们可以借用该对象的方法和属性快速获取我们需要的数据

用法: BeatifulSoup(html, resolver)

解析器的选择,根据不同的需求选择响应的解析器

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

bs4中对象的种类

首先来看一段测试代码:

import bs4

import requests

# html测试代码

#只包含一个div标签

#div中包含一个p标签,一段文本 和 一段注释

html ='

p标签文本

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)

显示结果:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值