Python中bs4有什么用
admin
2023-07-12 11:24:17
0

了解bs4

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

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

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

BeautifulSoup

BeautifulSoup是bs4中非常重要的一个类
它利用html或xml文件快速生一个对象
我们可以借用该对象的方法和属性快速获取我们需要的数据
用法: BeatifulSoup(html, resolver)

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

Python中bs4有什么用


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)
显示结果:

Python中bs4有什么用


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

相关内容

热门资讯

问题居然在实体卡槽上!美版iP... 6月2日消息,日前,又有博主提前把还没发布的iPhone 18 Pro电池参数给曝光了出来,根据爆料...
2026年618手机购机攻略:... 每年618都是手机换新的最佳窗口期,2026年大促叠加数码国补、平台满减、品牌降价三重福利,新机老机...
8.99万打穿底价!史无前例的... 科技的浪漫,不是将人类送入遥不可及的星辰,而是把曾经高不可攀的科幻,变成柴米油盐里的“论斤卖”。 如...
苹果首款折叠屏iPhone U... PChome 6月2日消息,据知名数码博主@i冰宇宙最新曝光的机模谍照,苹果首款折叠屏手机(内部命名...
特朗普:美伊暂停谈判?假新闻! 当地时间6月2日,美国总统特朗普否认伊朗已停止与调解方沟通,称美国与伊朗之间的对话一直在持续进行。特...
白宫记协晚宴改期至7月,特朗普... 当地时间6月2日,美国总统特朗普表示,此前因突发暴力事件而中断的白宫记协晚宴已确定改期至7月24日举...
特朗普,开掉“不听话的情报头子... 苦撑15个月后,美国国家情报总监加巴德即将离开白宫。她对辞职的解释是:丈夫近期确诊罕见骨癌,自己希望...
面粉染头模仿黄仁勋,农村青年走... “先赔偿5000元肖像侵权使用费,再删除所有视频,要么就起诉你。”这是黄仁勋的模仿者杨洋最近频繁收到...
驻马店非遗“大集”开张 把网络... 顶端新闻记者 王丹/文 李思翰 胡楚昊/图红纸剪出“抵制网络谣言”,糖画写下“不信谣不传谣”……5月...
A股三大指数集体收涨 贵金属涨...   A股三大指数集体收涨 贵金属涨幅居前  【A股三大指数集体收涨 贵金属涨幅居前】6月2日,A股三...