【Beautiful Soup库】{1} ——Beautiful Soup库的基本元素

Beautiful Soup库的理解:

Beautiful Soup库是解析、遍历、维护“标签树”的功能库。

属性用来定义标签的特点,由键值对构成.


Beautiful Soup库的引用:

Beautiful Soup库,也叫 beautifulsoup4 或 bs4。

from bs4 import BeautifulSoup
import bs4

如何理解BeautifulSoup这个类呢?

BeautifulSoup 本身解析的是 HTML 和 XML 的文档,这个文档和标签树是一一对应的,经过了 BeautifulSoup类的处理,将标签树转换为 BeautifulSoup类,BeautifulSoup类就是能够代表标签树的一个类型。

可以理解为标签树就是一个字符串。

事实上,我们认为 HTML文档、标签树、BeautifulSoup类三者等价。
from bs4 import BeautifulSoup
soup1 = BeautifulSoup("<html>data</html>", "html.parser")
soup2 = BeautifulSoup(open("S:\Pycharm\Project\demo\python123demo\demo.html"), "html.parser")

BeautifulSoup 对应一个 HTML/XML 文档的全部内容。


Beautiful Soup库解析器:
解析器使用方法条件
bs4的HTML解析器BeautifulSoup(mk, ‘html.parser’)安装bs4库
lxmI的HTML解析器BeautifulSoup(mk, ‘Ixml’)pip install lxml
lxml的XML解析器BeautifulSoup(mk, ‘xmI’)pip install lxml
html5lib的解析器BeautifulSoup(mk, ‘html5lib’)pip install html5lib
Beautiful Soup类的基本元素:
基本元素说明
Tag标签,最基本的信息组织单元,分别用<>和</>标明开头和结尾
Name标签的名字,< p >…< /p >的名字是’p’,格式:< tag >.name
Attributes标签的属性,字典形式组织,格式:< tag >.attrs
NavigableString标签内非属性字符串,<>…</>中字符串,格式:< tag >.string
Comment标签内字符串的注释部分,一种特殊的Comment类型

接下来我们用下面这个 HTML页面来获取 Beautiful Soup类的基本元素:

http://python123.io/ws/demo.html

import requests
r = requests.get("https://python123.io/ws/demo.html")
demo = r.text

获得tag标签的相关方法:
from bs4 import BeautifulSoup
soup = BeautifulSoup(demo, "html.parser")
print(soup.title)
tag = soup.a
print(tag)

文本中存在两类标签,只点击soup.a,只能获得其中第一个标签内容。


获取标签名字的方法:
from bs4 import BeautifulSoup
soup = BeautifulSoup(demo, "html.parser")
print(soup.a.name)
print(soup.a.parent.name)
print(soup.a.parent.parent.name)

获取标签属性:
tag = soup.a
print(tag.attrs)
print(tag.attrs['class'])
print(tag.attrs['href'])
type(tag.attrs)
type(tag)

获取标签的NavigableString元素:
print(soup.a)
print(soup.a.string)
print(soup.p)
print(soup.p.string)
type(soup.p.string)

在p标签中实际还包含了一个b标签,但是当我们输出 soup.p.string 的时候,打印的并不包含b标签,这说明 NavigableString 是可以跨越多个标签层次的


获取Comment类型:
newsoup = BeautifulSoup("<b><!--This is a comment--></b><p>This is not a comment</p>", "html.parser")
print(newsoup.b.string)
type(newsoup.b.string)
print(newsoup.p.string)
type(newsoup.p.string)

我们对 b标签和 p标签分别用 .string 的时候,都能产生一段文本,但是当这段文本是注释形式的时候,它并没有标明它是注释,也就是说它的尖括号、感叹号被去掉了。所以在我们分析文档的时候,我们需要对其中的注释部分做相关的判断,判断的依据就是它的类型。


总结:
  • 用 .tag 获得标签信息
  • 用 .name 获得标签名字
  • 用 .attrs 获得标签属性
    无论一个标签是否存在属性,都会返回一个字典类型(空字典)
  • 用 .string 获得非属性字符串/注释
    获取过程中,如果其中存在注释,那么它会返回一种特殊的注释类型,如果我们不希望提取注释信息,需要对这种类型做相关的判断。

参考资料:Python网络爬虫与信息提取(北京理工大学慕课)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值