python中Beautiful Soup 4库的使用总结

前言:Beautiful Soup是能够从html或者xml文档中提取结构化数据的一个python库。在网络爬虫任务中得到应用广泛,目前大多使用的是Beautiful Soup4库。bs4库主要通过解析器将html或者xml文档解析成树形结构的文档对象,然后可以对文档树执行遍历、搜索、修改的操作。


  • BeautifulSoup方法介绍 


BeautifulSoup(markup='', features=None, builder=None, parse_only=None, from_encoding=None,
 exclude_encodings=None, **kwargs)

"""
markup:是你需要解析的对象,类型为字符串或者文件句柄,默认为空字符串
features:传入的解析器类型
from_encoding:设置传入的html文档的编码格式,帮助正确解析(正常自动编码检测很准确,无需考虑。此外在传入的是字符串的时候,如果设置这个参数,也会被忽视,因为在python中字符串都是Unicode编码)
"""
#BeautifulSoup方法的简单调用
soup = BeautifulSoup(markup,'html.parser')
'返回的是BeautifulSoup对象'
  • BeautifulSoup中的对象介绍

一共有四种对象,分别是BeautifulSoup、Tag、Comment、NavigableString。其中Comment是NavigableString的一种情况,通常用不到。BeautifulSoup、Tag、NavigableString这三中对象之间的关系为,BeautifulSoup对象可以理解为包括html文档的所有内容,BeautifulSoup对象的子节点可以是多个Tag对象,Tag对象的子节点可以是多个NavigableString。NavigableString没有子节点,因而其方法和属性也较少。三者之间的关系类似下图类似下图。每个对象都可以看做一个节点。

 

 

对象方法方法描述返回值类型
 tag.name返回标签的名字str
 tag.attrs返回标签的属性值dict
Tagtag.contents将tag的直接子节点以列表的方式输出列表
tag.children返回tag的直接子节点生成器生成器
tag.descendants将tag的子孙节点以列表的方式输出(包括直接子节点和子孙节点)列表
tag.string 仅当tag对象中只包括一个子节点时使用。当包含多个子节点的时候,返回为None。
bs4.element.NavigableString/ None
tag.strings当tag对象中包括多个子  节点时使用,返回生成器生成器
tag.stripped_strings基本同上,只是去掉了多余的空白内容(全部是空格的行会被忽略掉,段首和段末的空白会被删除)生成器
tag.parent获取tag 的父辈节点bs4.element.Tag/bs4.element.BeautifulSoup
tag.parents获取tag 的所有父辈节点生成器
tag.next_sibling获取tag对象下一个兄弟节点(注意通常是字符串或空白,两次使用该方法,才能正常得到兄弟tag对象)bs4.element.Tag/None
tag.previous_sibling获取tag对象上一个兄弟节点bs4.element.Tag/None
tag.next_siblings

包含当前tag对象的所有下一个兄弟节点

生成器
tag.previous_siblings包含当前tag对象的所有上一个兄弟节点生成器
tag.next_element

指向解析过程中下一个被解析的对象(字符串或tag)  例如<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a> 会先解析a标签,然后再解析NavigableString节点,在解析a标签和下一个标签之间的换行符。

bs4.element.NavigableString

bs4.element.Tag

tag.next_elements 生成器
tag.previous_element指向解析过程中上一个被解析的对象(字符串或tag)

bs4.element.NavigableString

 

tag.previous_elements 

生成器

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


注意点:因为,Navigable对象是没有子节点的,因此,tag对象那些获取子节点的方法,Navigable对象是没有的。

搜索文档树的方法:

1、tag.find_all( name , attrs , recursive , text , **kwargs)

方法描述:搜索当前tag的所有tag子节点。返回值为列表。

参数介绍:

1.1  name:为你所需要查找的tag对象的名称。  其值可以是字符串,列表,正则表达式,方法,True

                  如果传入正则表达式,Beautiful Soup会通过正则表达式的 match() 来匹配内容

                  如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回

                  True 可以匹配任何值

                  方法只接受一个元素参数(一般为tag对象),返回 True 表示匹配并且被找到,如果不是则反回False。

1.2   attrs: 关键字参数写法,attrs = {'x':'y'}。表示查找属性x值为y的标签。也可以直接传入x = 'y',注意class为python的保留字,所以不可以直接使用class = 的用法,可以换成class_ =  的写法。

1.3   recursive: 表示是否搜索子孙节点,为true表示搜索子孙节点,为false表示搜索直接子节点。默认为true

1.4   text:  搜索文档中的字符串内容,其值可以是字符串,列表,正则表达式,方法,或者是true

1.5   limit:  表示搜索返回的结果的个数。

2、tag.find()   该方法返回的是查找到的标签对象。

有关bs4库的详细内容参考文章:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值