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小时内删除。
发表评论