BeautifulSoup模块详解
【目录】
o1 Beautiful Soup
1.1 安装与基础配置
1.2 基本操作
o2. 对象的种类
2.1 Tag
2.1.1 Name
2.1.2 Attributes
2.1.3 多值属性
2.2 NavigableStringunicode字符的种类有
2.3 BeautifulSoup
2.4 Comment
o3. 遍历文档树
3.1 子节点
3.1.1 tag的名字
3.1.2 .contents和.children
3.1.3 .descendants
3.1.4 .string
3.1.5 .strings和stripped_strings
3.2 父节点
3.2.1 .parent
3.2.2 .parents
3.3 兄弟节点
3.3.1 .next_silbing和.previous_sibling
3.4 回退和前进
3.4.1 .next_element和.previous_element
3.4.2 .next_elements和.previous_elements
o4. 搜索文档树
4.1 过滤器
4.1.1 字符串
4.1.2 正则表达式
4.1.3 列表
4.1.4 True
4.1.5 方法
4.2 find_all()
4.2.1 Name参数
4.2.2 KeyWord参数
4.2.3 按CSS搜索
4.2.4 text参数
4.2.5 limit参数
4.2.6 recursive参数
4.3 其他find系列函数
4.4.1 find_parents和find_parents
4.4.2 find_next_siblings和find_next_sibling
4.4.3 find_all_next和find_next_previous
4.4.4 find_all_previous和find_previous
1 Beautiful Soup
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查,修改文档的方式。
1.1 安装与基础配置
如果电脑中已经安装了pip包,那么直接在cmd窗口中输入:
pip install pip install beautifulsoup4
如果没有安装pip包,可以下载BS4的源码,然后通过setup.py来安装。即,在目录下右键打
开cmd窗口,输入:
Python setup.py install
BS4的开发是在python2.7和python3.2的环境中开发的,因此本文中的命令在python2与python3中是通用的。BeautifulSoup发布时候打包成为Python2版本的代码,在Python3环境下安装时,会自动转换成Python3的代码,如果没有安装过程,那么代码就不会被转换。
如果代码抛出了 ImportError 的异常: “No module named HTMLParser”, 这是因为你在Python3版本中执行Python2版本的代码.
如果代码抛出了 ImportError 的异常: “No module named html.parser”, 这是因为你在Python2版本中执行Python3版本的代码.
解决以上问题最简单的办法就是重新安装2333
如果在ROOT_TAG_NAME = u’[document]’代码处遇到 SyntaxError “Invalid syntax”错误,需要将把BS4的Python代码版本从Python2转换到Python3. 可以重新安装BS4:
Python3 setup.py install
或者在bs4的目录中执行Python代码版本转换脚本:
2to3-3.2 -w bs4
BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是lxml。lxml的同样可以使用pip进行安装。
另一个可供选择的解析其实纯Python实现的html5lib,它的结息方式与浏览器相同,安装方法与lxml相同。如果使用的是Anaconda的整体包,那么以上包应该都是包含在内的。
不同解析器之间的区别会在以后的文章中介绍。
一般情况下,推荐使用lxml解析器,其效率更高。
1.2 基本操作
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc)  #此处的html_doc是通过request 得到的网站响应
print(soup.prettify())  #可以得到一个整理规范的标准HTML文档
这段代码逻辑如下:首先导入BeautifulSoup包。然后通过构造方法调用一个文档对象。构造方法中可以传入一段字符串或者一个文件句柄。首先,文档被转换为Unicode格式,并且HTML的实力都被转换为Unicode编码。
然后BeautifulSoup会选择最合适的解析器来解析文档。同样,也可以手动指定解析器,格式如下:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc,"lxml")
print(soup.prettify())
得到的是一个规范化的HTML文档。
接下来将介绍这个HTML文档包含的元素类别和属性。
2. 对象的种类
Beautiful Soup将复杂的HTMl文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为四种Tag、NavigableString、BeautifulSoup、Comment
接下来分别介绍这四种对象。
2.1 Tag
Tag与HTML原生文档中的tag相同
soup = BeautifulSoup(' <b class="boldest">Extremely bold</b><b class = "boldest> Extremly bold bold</b>')
tag = soup.b
type(tag)  #<class 'bs4.element.Tag'>
上述代码中,首先使用构造一个BeautifulSoup对象;然后通过soup.b选取第一个name为b的Tag;可以看到,tag的类型为Tag。
Tag有很多属性,在遍历文档树和搜索文档树中都有介绍
Tag的重要属性:name、attributes
2.1.1 Name
每个Tag都有自己的名字,通过.name来获取:
tag.name
# u'b'
如果改变了Tag的Name,那么将影响HTML文档中所有该Tag的属性。
tag.name = "blockquote"
print(soup)
# <blockquote class="boldest">Extremely bold</blockquote>
<b class = "boldest> Extremly bold bold</b>
2.1.2 Attributes
一个tag可能有多个属性,在上面给出的例子中,有一个”class”属性,值为”blodest”,对于.tag的操作类似于字典:
tag['class']
# u'blodest'
也可以直接用.attrs:
tag.attrs
# {u'class': u'boldest'}
Tag属性可以添加、删除或者修改,如同字典一样:
tag['class'] = 'verybold'
tag['id'] = 1
tag
# <blockquote class="verybold" id="1">Extremely bold</blockquote>
del tag['class']
del tag['id']
tag
# <blockquote>Extremely bold</blockquote>
tag['class']
# KeyError: 'class'
('class'))
# None
2.1.3 多值属性
HTML4定义了一系列可以包含多个值得属性。在HTML5中溢出了一些,却增加的更多,最常见的多值属性是class(一个tag可以由多个CSS的class)。还有一些属性rel,rev,accept-charset,headers,accesskey。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。