关于Beautiful Soup文档阅读

2018-10-22

用途

Beautiful Soup是一个用于提取 HTML 和 XML 文件中提取数据的Python库。它与常用的解释器配合使用,为导航,搜索,修改解释器树提供惯用方法。节约时间。

用法

1、直接访问标签
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""```
例子1:访问标签<body>,每一个标签中的内容是在<body>于</body>之间的内容。

soup.body
*

The Dormouse's story

Once upon a time there were three little sisters; and their names were Elsie, Lacie and Tillie; and they lived at the bottom of a well.

...

* ``` 例子2:访问标签下的第一个标签a的内容。 **soup.body.a** Elsie 例子3:访问标签下的所有标签a的内容。获取的内容为list soup.body.find_all('a') h = soup.body.find_all('a') [ Elsie, Lacie, Tillie] 例子4:访问第二个标签 内容 h[2] Tillie 例子4:访问第二个标签 键id对应的值 h[2].get('id') 'link3'

在网页的解析器方面有四种:
1、python标准库:BeautifulSoup(markup, “html.parser”);特点:执行速度适中;
2、lxml HTML 解析器:BeautifulSoup(markup, “lxml”);特点:速度快;
3、lxml XML 解析器:BeautifulSoup(markup, [“lxml-xml”]) BeautifulSoup(markup, “xml”);特点:唯一支持XML的解析器;速度快
4、html5lib:BeautifulSoup(markup, “html5lib”);特点:速度慢;

对象的种类:
1、tag(标签):标签中有两个重要参数:tag.name 与tag.attribute。属性的取法。可以可字典操作一样,也可以用点取。点取方式为tag.attr。操作也是和字典一样可以,增删改查。在属性中有些属性是多值的,比如class,rel,rev,accept-charset,headers,accesskey。这些多值属性在取属性的时候,多值输出返回为list类型;而对于单值的属性查询时,如果返回的多值的话,是字符串类型。

2、NavigableString(可遍历字符串):这个对象是标签下面的有一个字符串类型;tag种的字符串是不能编辑的,只能被替换,整体替换。替换的方法是replace_with()。不能用于content,string,find。如果想在Beautiful Soup之外使用 NavigableString 对象,需要调用 unicode() 方法,将该对象转换成普通的Unicode字符串,否则就算Beautiful Soup已方法已经执行结束,该对象的输出也会带有对象的引用地址,这样会浪费内存。

3、BeautifulSoup:

4、comment:是特殊的NavigableString,用于注释与特殊字符串。

子节点

子节点可以理解为tag标签,一个tag中可以包含多个字符串和tag标签,其他的标签就是这个标签的子节点。
对于标签的访问可以使用点取的方式执行比如:soup.head
对于获取标签下的子节点:soup.body.a
对于搜索么个标签的所有,可以罗列:soup.find_all(‘a’)

contents

输出tag标签中的内容,内容为list
xml_soup = BeautifulSoup(’

’, ‘xml’)
xml_soup.contents
[

].
xml_soup.contents[0].name
‘p’
xml_soup.contents[0].get(‘class’)
‘body strikeout’

children

对于tag标签的子节点进行循环

parent

对于tag标签的父节点:没有父节点就返回None
soup.title

The Dormouse's story soup.title.parent The Dormouse's story

兄弟节点

就是在同一个tag标签下,并列的多个节点之间的关系。也就是说兄弟节点间有相同的父节点。而对于兄弟节点之间的查询可以使用下面的方法:
.next_sibling:后一个兄弟节点;
.previous_sibling:前一个兄弟节点;

.next_element:当前解析的下一个解析对象的解析内容;
.previous_elements:当前解析的上一个解析对象的解析内容;

搜索

搜索的方法有两种:
1、find():搜索对应的内容的第一个
2、find_all():搜索对应的内容的所有过滤器条件。

搜索的过滤器种类有:
1、字符串;这是一般的用法。
2、正则表达式:re.compile(“t”) ;match()
3、列表:list
4、True:匹配任何值
5、方法:
6、name :
7、keyword参数:string :字符串内容
8、keyword参数:limit :限制返回的结果数量
9、keyword参数:recursive :直接子节点

find_parents()

是.parents的迭代用法

find_parent()

是.parent的迭代用法

find_previous_siblings()
返回所有符合条件的前面的兄弟节点
find_previous_sibling()
返回第一个符合条件的前面的兄弟节点

find_all_next()
返回所有符合条件的节点
find_next()
返回第一个符合条件的节点

find_all_previous()
返回所有符合条件的节点
find_previous()
返回第一个符合条件的节点

.select()
0、字符串参数查找:soup.select(“title”)
1、tag标签;soup.select(“body a”)
2、tag标签下的直接子标签;soup.select(“head > title”)
3、兄弟节点标签:soup.select("#link1 ~ .sister")
4、CSS的类名查找:soup.select(".sister")
5、tag的id查找:soup.select("#link1")
6、同时用多种CSS选择器查询元素::soup.select("#link1,#link2")
7、是否存在某个属性来查找:soup.select(‘a[href]’)
8、属性的值来查找:soup.select(‘a[href^=“http://example.com/”]’)

select_one()
返回查找到的元素的第一个

修改tag的属性
1、.string
2、append()与 NavigableString()做添加处理
3、创建注释: NavigableString()
4、创建tag标签:BeautifulSoup.new_tag()
5、插入到指定位置:Tag.insert()
6、insert_before():在当前tag或文本节点前插入内容
7、insert_after():在当前tag或文本节点后插入内容
8、PageElement.extract():将当前tag移除文档树,并作为方法结果返回
9、decompose():将当前节点移除文档树并完全销毁
10、replace_with():移除文档树中的某段内容,并用新tag或文本节点替代它
11:wrap():可以对指定的tag元素进行包装 ,并返回包装后的结果
12、unwrap():将移除tag内的所有tag标签,该方法常被用来进行标记的解包

输出
格式化输出
prettify():Beautiful Soup的文档树格式化后以Unicode编码输出,每个XML/HTML标签都独占一行

压缩输出
unicode()或 str():如果只想得到结果字符串,不重视格式。
encode()或decode() :encode方法获得字节码或调用 decode方法获得Unicode

输出格式
将HTML中的特殊字符转换成Unicode,将文档转换成字符串,Unicode编码会被编码成UTF-8.这样就无法正确显示HTML特殊字符。

get_text():获取tag中的包含的文本内容,并将结果作为Unicode字符串返回
get_text("|"):通过参数指定tag的文本内容的分隔符
get_text("|", strip=True):除获得文本内容的前后空白

编码

参考:Beautiful Soup 4.4.0 文档 https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值