当前位置: 首页 > 工具软件 > Python bsddb3 > 使用案例 >

python中bs包的使用方法

邓德厚
2023-12-01

Beautifulsoup简介

简单来说,BeautifulSoup就是Python的一个HTML或XML的解析库,我们可以用它来方便地从网页中提取数据,官方的解释如下:

BeautifulSoup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。BeautifulSoup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时你仅仅需要说明一下原始编码方式就可以了。BeautifulSoup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

所以说,利用它我们可以省去很多繁琐的提取工作,提高解析效率。

  • bs:beautifulsoup。
  • 历史坑:beautifulsoup 只支持py2, beautifulsoup4 支持py3
  • 安装 pip install beautifulsoup4
  • 命名坑:python包我们导入的是包文件夹名字,包有别名beautifulsoup4。 第三方包python解释器/Lib/site-packages/。
from bs4 import BeautifulSoup
html="""
<html>
    <body>
        <a id="aaa" href='http://www.baidu.com' name='aaa'
        class="aaa">百度一下</ a>
        < a href='http://www.baidu.com'>百度一下2</ a>
        <h1>大家好</h1>
    </body>
</html>
"""

实例化。参数1被解析html源代码。参数2解析器。 1)内置的html包的parser.py 2)c语言写的被封装为python调用的lxml包。
html.parser内置包负责解析html源代码,把数据放到bs对象中,bs对象再取数据。

使用方法
  • 代码为:
bs=BeautifulSoup(html,'html.parser')
# 取数据
print(bs.a)                   #取标签
print(bs.a['href'])           #取标签属性值
print(bs.a.string)            #取标签内容
print(bs.body.children)
print("-----------------------------------")

print(bs.find('a'))
print(bs.find_all)             #如果要查询所有的标签,则需要使用find()和find_all()
print(bs.find_all('a',limit=1)[0])        #limit 是取前x项的意思,find()实际等于limit=1的情况,只是find_all()返回的是列表
print(bs.find_all(lambda tag: len(tag.attrs) == 2))      #BS4允许我们把特定函数类型当做findAll函数的参数,唯一的限制是这些函数必须把一个标签当做参数且返回结果为bool类型
print(bs.find_all('a', {"class" : "aaa"}))      #可以通过这个attrs去更加详细地过滤标签,限制了标签为a,且属性中的class = sister
print("------------------------------------")
print(bs.title)
print(bs.a.string)               #.string 即可获得标签内部的文字
print(type(bs.a.string))       #检查一下它的类型
print(type(bs.a))              #类型
print(type(bs.name))           #类型
print(bs.name)                 #名称
print("-------------------------------------")
print(bs.attrs)                #属性  是字典
print(bs.a.attrs)              #我们把 a 标签的所有属性打印输出了出来,得到的类型是一个字典。
print(bs.a.get('class'))       #利用get方法,传入属性的名称,二者是等价的
bs.a['class']="newClass"       #对这些属性和内容等等进行修改
print(bs.a.get('class'))
del bs.a['class']              #对这个属性进行删除
print(bs.a)
  • 运行结果:
<a class="aaa" href="http://www.baidu.com" id="aaa" name="aaa">百度一下</a>
http://www.baidu.com
百度一下
<list_iterator object at 0x000001B5EAB327B8>
-----------------------------------
<a class="aaa" href="http://www.baidu.com" id="aaa" name="aaa">百度一下</a>
<bound method Tag.find_all of 
<html>
<body>
<a class="aaa" href="http://www.baidu.com" id="aaa" name="aaa">百度一下</a>
        &lt; a href='http://www.baidu.com'&gt;百度一下2</body></html>
<h1>大家好</h1>


>
<a class="aaa" href="http://www.baidu.com" id="aaa" name="aaa">百度一下</a>
[]
[<a class="aaa" href="http://www.baidu.com" id="aaa" name="aaa">百度一下</a>]
------------------------------------
None
百度一下
<class 'bs4.element.NavigableString'>
<class 'bs4.element.Tag'>
<class 'str'>
[document]
-------------------------------------
{}
{'id': 'aaa', 'href': 'http://www.baidu.com', 'name': 'aaa', 'class': ['aaa']}
['aaa']
newClass
<a href="http://www.baidu.com" id="aaa" name="aaa">百度一下</a>
 类似资料: