快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → Beautiful Soup使用

Beautiful Soup使用

时间:2022-05-09 16:49:48人气:作者:快盘下载我要评论
beautiful soup使用

Beautiful Soup官方文档是一个HTML/XML的解析器,主要的功能是如何解析和提取HTML/XML数据;
lxml只会局部遍历,而Beautiful Soup是基于HTML DOM的,会载入整个文档,解析整个DOM树,因此解析时间和内存开销都会大很多,所以性能要低于lxml;
BeautifulSoup用来解析 HTML比较简单,API非常人性化,支持CSS选择器、Python标准库中的HTML解析器,也支持 lxmlXML解析器;

安装
pip install beautifulsoup4


1.语法 创建soup对象
    from bs4 import BeautifulSoup
    # html为解析文本, 'lxml'指定解析器
    soup = BeautifulSoup(html, 'lxml')
    # 格式化输出 soup 对象的内容
    print(soup.prettify())


一、find_all()使用

参数: find_all(name, attrs, recursive, text, **kwargs)**

1)name参数

name 参数可以查找所有名字为 name 的tag,字符串对象会被自动忽略掉

A.字符串

最简单的过滤器是字符串,在搜索方法中传入一个字符串参数,Beautiful Soup会查询与字符串完整匹配的内容;

# 查询标签名称为<p></p>标签的元素列表
soup.find_all('p')


B.正则

如果传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 match() 来匹配内容.下面例子中找出所有以b开头的标签,这表示和标签都应该被找到

soup.find_all(re.compile(r'^b'))


C.列表

如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回

# 查询html中标签名称为<p></p>或者<b></b>的元素
soup.find_all(["p", "b"])


2) keyword参数
# 查询<p></p>标签对象的class属性是title的元素
soup.find_all('p',attrs={'class':'title'})


3)text参数

通过 text 参数可以搜索文档中的字符串内容,与 name 参数的可选值一样, text 参数接受 字符串 , 正则表达式 , 列表

soup.find_all(text="Elsie")

soup.find_all(text=["Tillie", "Elsie", "Lacie"])

soup.find_all(text=re.compile("DorMouse+"))


二、find使用

find的用法与find_all一样,区别在于find返回 第一个符合匹配结果,find_all则返回 所有匹配结果的列表

三、 CSS选择器

CSS选择器与 find_all 方法有异曲同工之妙的查找方法,也是返回所有匹配结果的列表。

写 CSS 时,标签名不加任何修饰,类名前加.,id名前加# 在这里我们也可以利用类似的方法来筛选元素,用到的方法是 soup.select(),返回类型是 list (1)通过标签选择器查找
    soup.select('title')
    # 结果-->[<title>The Dormouse's story</title>]


(2)通过类选择器查找
soup.select('.title')
# 结果-->[<p class="title" name="dromouse"><b>The Dormouse's story</b></p>]


(3)通过id选择器查询
soup.select('#link1')
# 结果-->[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]


(4)层级选择器查询
soup.select('p #link1')
# 结果-->[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]


(5)通过属性选择器
soup.select("a[class='sister']")


(6)get_text()获取文本内容

以上的 select 方法返回的结果都是列表形式,可以遍历形式输出,然后用 get_text() 方法来获取它的内容

(7)获取属性
# 创建Beautiful Soup对象
soup = BeautifulSoup(html, 'lxml')  
# 打印<a></a>标签的href属性
print(soup.select('a')[0].get('href'))
print(soup.find('a').get('href'))
print(soup.find_all('a')[0].get('href'))
print(soup.find('p').get('name'))
# 打印结果
http://example.com/elsie
http://example.com/elsie
http://example.com/elsie
dromouse


2. bs4的四大对象

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:

Tag NavigableString BeautifulSoup Comment

代码展示

# 创建Beautiful Soup对象
soup = BeautifulSoup(html, 'lxml')
# 打印获取的对象类型
print(type(soup.a))
print(type(soup.p.string))
print(type(soup))
print(type(soup.a.string))


打印结果

<class 'bs4.element.Tag'>
<class 'bs4.element.NavigableString'>
<class 'bs4.BeautifulSoup'>
<class 'bs4.element.Comment'>


3.遍历文档树 3.1 获取子节点:.contents,.children属性 3.1.1 .content

tag的.content属性可以将tag的子节点以列表方式输出

# 创建Beautiful Soup对象
soup = BeautifulSoup(html, 'lxml')
# 把soup对象中第一个<p></p>标签的子节点以列表形式输出
print(soup.p.contents)


输出结果

[<b>The Dormouse's story</b>, <a>3</a>]


3.1.2.children

它返回的不是一个 list,不过我们可以通过遍历获取所有子节点。
我们打印输出 .children 看一下,可以发现它是一个 list 生成器对象

soup.p.children
<list_iterator object at 0x000002ADD46B95F8>


网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。