一、强大的
BeautifulSoup
:
BeautifulSoup
是一个可以从
html
或
xml
文件中提取数据的
Python
库。它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。在
Python
开发中,主要用的是
BeautifulSoup
的查找提取功能,修改功能很少使用
1
、安装
BeautifulSoup
pip3 install beautifulsoup4
2
、安装第三方
html
解析器
lxml
pip3 install lxml
3
、安装纯
Python
实现的
html5lib
解析器
pip3 install html5lib
(
1
)
BeautifulSoup
:
表示的是一个文档的全部内容。大部分时候,可以把它当作
Tag
对象,是一个特殊的
Tag
,因为
BeautifulSoup
对象并不是真正的
HTML
和
XML
,所以没有
name
和
attribute
属性
(
2
)
Tag
:与
XML
或
HTML
原生文档中的
Tag
相同,通俗讲就是标记
抽取
title
:
print
(
soup.title
)
print
(
soup.a
)
抽取
p
:
print
(
soup.p
)
Tag
中有两个重要的属性:
name
和
attributes
。每个
Tag
都有自己的名字,通过
.name
来获取
print
(
soup.title.name
)
操作
Tag
属性的方法和操作字典相同
class=’p1’>Hello World</p>
print
(
soup.p[‘class’]
)
也可以直接
“点”取属性,如
.attrs
获取
Tag
中所有属性
print
(
soup.p.attrs
)
(
3
)
NavigableString
:获取标记内部的文字
.string
BeautifulSoup
用
NavigableString
类来封装
Tag
中的字符串,一个
NavigableString
字符串与
Python
中的
Unicode
字符串相同,通过
unicode
()方法可以直接将
NavigableString
对象转换成
Unicode
字符串
如:
u_string
= unicode(soup.p.string)
(
4
)
Comment
:对于一些特殊对象,如果不清楚这个标记
.string
的情况下,可能造成数据提取混乱。因此在提取字符串时,可以判断下类型:
type(soup.a.string) == bs4.element.Comment:
print(soup.a.string)
5
、遍历文档
(
1
)
子节点:
A
、对于直接子节点可以通过
.contents
.children
来访问
.contents
---->
将
Tag
子节点以列表的方式输出
print
(
soup.head.contents
)
.children
----->
返回一个生成器,对
Tag
子节点进行循环
child in soup.head.children:
print
(
child
)
B
、获取子节点的内容
.string
如果标记里没有标记了,则返回内容;如果标记里只有一个唯一的标记,则返回最里面的内容;如果包含多个子节点,
Tag
无法确定
.string
方法应该返回哪个时,则返回
None
.strings
---->
主要应用于
Tag
中包含多个字符串的情况,可以进行循环遍历
str in soup.strings:
print
(
repr(str)
)