2017-07-26 10:10:11

Beautiful Soup可以解析html 和 xml 格式的文件。

Beautiful Soup库是解析、遍历、维护“标签树”的功能库。使用BeautifulSoup库非常简单,只需要两行代码,就可以完成BeautifulSoup类的创建,这里命名为soup,接下来就可以对soup进行相关处理了。一个BeautifulSoup类对应html或者xml的全部内容。

BeautifulSoup库将任意html文件转换成utf-8格式

一、解析器

BeautifulSoup类创建的时候第二个参数是解析器,上面的代码中用的解析器为‘html.parser’,BeautifulSoup支持的解析器有:

二、BeautifulSoup类的基本元素

  • 使用soup.tag来访问一个标签的内容,如:soup.title;soup.a等,这里的返回值为访问标签的第一个出现的值
  • 使用soup.tag.name可以得到当前标签的名字,返回值为字符串,如:soup.a.name 会返回字符串 ‘a’,也可以使用soup.a.parent.name来查看 a 标签父母的名字
  • 使用soup.tag.attrs可以得到当前标签的属性,返回值为一个字典,如果没有属性会返回一个空字典,如:soup.a.attrs 会返回 a 标签的属性信息
  • 使用soup.tag.string可以得到当前标签的字符串,如:soup.a.string 会返回 a 标签的内容字符串
  • 内容字符串有两种类型一是NavigableString类型,一种是Comment类型,Comment类型的格式是<p> <!-- This is an comment --></p>,在调用soup.p.string是会返回This is an comment,但是其类型是Comment类型。

三、soup的内容遍历

标签树的遍历有三种方式,即下行遍历,上行遍历和平行遍历。

(1)下行遍历属性

举例:

#遍历儿子节点
for child in soup.body.children:
print(child) #遍历子孙节点
for child in soup.body.descendants:
print(child)

值得注意的是子孙节点不仅包含标签,还包含标签之间的字符串类型,这点需要注意与排除。

(2)上行遍历的属性

soup.parent为空,需要进行区分,可以使用for循环对parents进行遍历:

(3)平行遍历的属性

#遍历后续节点
for sibling in soup.a.next_sibling:
print(sibling) #遍历前续节点
for sibling in soup.a.previous_sibling:
print(sibling)

四、信息提取

  • name :  对标签名称的检索字符串,返回标签name的所有内容,并生成列表,也以使用列表一次查找多个标签;如果标签名称为TRUE,将返回所有的标签信息;也可以使用正则对返回的标签信息做筛选

  •   attrs: 对标签属性值的检索字符串,可标注属性检索,返回列表,属性值必须精确,如果不提供精确的值得话,会返回空列表,可以使用正则表达式进行非精确的匹配

  •  recursive: 是否对子孙全部检索,默认True

  •  string: <>…</>中字符串区域的检索字符串,需要加上string=‘’进行检索

简写方式:

扩展方法:

最新文章

  1. 【夯实PHP系列】购物车代码说明PHP的匿名函数
  2. Leetcode: Remove K Digits
  3. 多态,虚拟方法,重写,接口,类库,委托,is,as运算符,泛型集合,万能变量
  4. networking常用命令
  5. C. Om Nom and Candies 巧妙优化枚举,将复杂度控制在10e6
  6. bjfu1099 度度熊大战僵尸
  7. ATL 创COM物
  8. 深入理解委托(Delegate)
  9. Scala:集合类型Collection和迭代器
  10. IOS 修改图片的地理位置信息
  11. Forth-83 多任务解析
  12. 039、Data Volume 之 bind mount (2019-02-28 周四)
  13. vue $mount 和 el的区别
  14. Expm 4_1 多段图中的最短路径问题
  15. day07-while,for循环
  16. 【linux】sed -e &#39;s/-//g&#39;
  17. openstack中的server
  18. 初识DataGridView 表格数据控件
  19. 手机APP测试环境搭建---appium
  20. php curl请求。header头中添加请求信息

热门文章

  1. Class类的特性(上)
  2. keras load model 遇到 自定义函数 Lambda(lambda x: softmax(x, axis=1), NameError: global name &#39;softmax&#39; is not defined
  3. python3 列表的常用方法
  4. VMWare中桥接、NAT、Host-only
  5. Hive 体系结构介绍
  6. Qt之美(一):D指针/私有实现
  7. bzoj1056/1862 [Zjoi2006]GameZ游戏排名系统
  8. Python3 Selenium自动化测试赋值出现:WebDriverException: Message: unknown error: call function result missing &#39;value&#39;
  9. log4j 根据类名指定文件
  10. 基于qml创建最简单的图像处理程序(1)-基于qml创建界面