版权声明:转载请注明:http://blog.csdn.net/update7?viewmode=contents https://blog.csdn.net/update7/article/details/89019927
理解BeautifulSoup
BeautifulSoup库本身解析的是html和xml文档,那么这个文档与标签树是一一对应的,经过了BeautifulSoup类的处理,html或xml文档这样的标签树,就被转换成一个BeautifulSoup类。BeautifulSoup类就是能够代表标签树的一个类型。
事实上我们认为html文档、标签树和BeautifulSoup类这三者是等价的。在这个等价的基础上我们就可以通过BeautifulSoup类,使得标签树形成了一个变量,而对这个变量的处理就是对标签树的相关的处理。
from bs4 import BeautifulSoup
soup = BeautifulSoup(‘<html>data</html>’, 'html.parser')
soup2 = BeautifulSoup(open('D://demo.html'), 'html.parser')
解析器
之前的例子我们使用了html解析器,那么除了html解析器,BeautifulSoup库也可以使用四种其他的解析器。
解析器 | 使用方法 | 条件 |
---|---|---|
bs4的HTML解析器 | BeautifulSoup(mk, 'html.parser') | 安装bs4库 |
lxml的HTML解析器 | BeautifulSoup(mk, 'lxml) | pip install lxml |
lxml的xml解析器 | BeautifulSoup(mk, 'xml') | pip install lxml |
html5lib的解析器 | BeautifulSoup(mk, 'html5lib') | pip install html5lib |
BeautifulSoup基本元素
下面我们介绍一下BeautifulSoup类的基本元素。
基本元素 | 说明 |
---|---|
Tag | 标签,最基本的信息组织单元,分别用<>和</>标明开头和结尾 |
Name | 标签的名字,<p>...</p> 的名字是’p‘,格式<tag>.name |
Attributes | 标签的属性,字典组织形式,格式<tag>.attrs |
NavigableString | 标签内非属性字符串,格式<tag>.string |
Comment | 标签内字符串的注释部分,一种特殊的Comment类型 |
Tag
标签是BeautifulSoup类里边的最基本的信息组织单元,它与html和xml文档中的一对尖括号相对应,它分别是用尖括号和尖括号中代反斜杠来标明开头和结尾。
>>> soup = BeautifulSoup(demo, 'html.parser')
>>> soup.title
<title>This is a python demo page</title>
>>> soup.a
<a href="http://www.jianshu.com/nb/11366912 class=" id="link1" py1"="">Python Crawler</a>
>>>
可以看到soup.title
返回了title标签的内容,soup.a
返回了a标签的内容。
Name
>>> soup = BeautifulSoup(demo, 'html.parser')
>>> soup.title.name
'title'
>>> soup.a.name
'a'
>>>
可以通过对任何一个标签使用点name的方式获得它的名字,那么这个名字显示出来是字符串类型。
Attributes
>>> soup = BeautifulSoup(demo, 'html.parser')
>>> tag = soup.a
>>> tag.attrs
{'href': 'http://www.jianshu.com/nb/11366912 class=', 'py1"': '', 'id': 'link1'}
>>>
我们知道标签的属性是在标签中标明标签特点的相关区域,以字典形式来组织。可以用.attrs
来获得属性的信息。
NavigableString
在标签尖括号的之间,是一种字符串,我们可以用.string
来获得其中的内容。
Comment
Comment是一种特殊的标签形式,表示html中的注释。