添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接


一、强大的 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)