python爬虫(三)Beautiful Soup 4

一、Beautiful Soup 4

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.

1、安装

$pip install beautifulsoup4

2、导入

from bs4 import BeautifulSoup

3、初始化

BeautifulSoup( markup="" , features=None )

markup:被解析对象,可以是文件对象或者html字符串
features:指定解析器
返回一个文档

注意:可以不指定解析器,就依赖系统已经安装的解析库了。

           1)html.parser解析器:使用Python标准库,容错差且性能一般;

            2)lxml解析器:容错能力强,速度快。需要安装系统C库

推荐使用 lxml解析器,效率高

 

二、BeautifulSoup的四种对象

1、BeautifulSoup对象:代表整个文档

2、Tag对象:它对应着HTML中的标签。有两个常用属性:

      1)name:Tag对象的名称,也就是标签名;

      2)attrs:标签的属性字典;

3、NavigableString:标记内的文本

4、Comment注释对象:也就是HTML中的注释,它被Beautiful Soup解析后对应 Comment对象;

 

三、遍历文档树

1、使用Tag对象:深度优先,找到返回的第一个节点;

     1)soup.div.contents:将对象的所有类型直接子节点列表方式输出;

     2)soup.div.children:返回子节点迭代器

     3)soup.div.descendants:返回第一个div节点的所有类型的子孙节点

2、遍历字符串:string要求只能有一个NavigableString对象,也就是如

<div> only string </div>

      如果div有很多的子孙节点,如何提取字符串?

soup.div.string   #返回None,因为NavigableString对象不唯一
soup.div.strings  #返回迭代器,带多余的空白字符
soup.div.stripped_strings   #返回迭代器,去除多余空白字符

四、搜索文档树

find_all( name=None , attrs={} , recursive=True , text=None , limit=None , **kwargs )

find_all方法,立即返回一个列表

1、name参数:官方称为filter过滤器,这个参数可以是以下类型:

      1)字符串

      2)正则表达式对象

      3)列表:或关系

      4)True或None:返回全部非字符串节点,非注释节点,即Tag对象类型;

      5)函数:此函数只能接收一个参数;

 

2、kwargs参数:使用关键字传参,被当做标签的属性来搜索,属性的传参可以是字符串、正则表达式对象、True、列表

注意:class的特殊处理:class是Python关键字,所以使用class_。class是多值属性,可以匹配任意一个,也可以完全匹配;

 

3、attrs参数:attrs接收一个字典,字典的key为属性名,value可以是字符串、正则表达式对象、True、列表

 

4、text参数:可以通过text参数搜索文档中的字符串内容,接受字符串、正则表达式对象、True、列表

 

5、limit参数:限制返回结果的数量;

 

6、recursive参数:默认递归搜索所有子孙节点,如果不需要设置为False;

注意:find_all()是非常常用的方法,可以简化省略掉;

 

find方法:参数和find_all一样,返回单值

找到了,find_all返回一个列表,而find返回一个单值,元素对象;

找不到,find_all返回一个空列表,而find返回一个None;

 

五、CSS选择器:soup.select()方法

soup.select()方法,支持大部分CSS选择器,返回列表

CSS中,标签名直接使用,类前面加 .点号,id前面加 #井号;

获取标签的属性使用字典key的方式获取,因为获取到的标签对象属性会以字典的形式存储

 

六、获取文本

搜索节点的目的往往是为了提取该节点的文本内容,一般不需要HTML标记,只需要文字

1、string:内容仅仅只能是文本类型,否则返回None

2、strings:迭代保留空白字符

3、stripped_strings:迭代不保留空白字符

4、text:本质上就是get_text(),保留空白字符strings

5、get_text():迭代并join,保留空白字符,strip默认是False

6、get_text(strip=True):迭代并join,不保留空白字符

 

七、Json解析

如果拿到一个Json字符串,想提取其中的部分内容,就需要遍历了,在遍历过程中判断;

还有一种方式,类似与XPath,叫做JsonPath

1、安装:

$pip install jsonpath
XPathJSONPath说明
/$根元素
.@当前节点
/. or []获取子节点
..不支持父节点
//..任意层
**通配符,匹配任意节点
@不支持json中没有属性
[][]下标操作
|[,]
不支持[start:end:step]切片
[]?()过滤操作
不支持()表达式计算
()不支持分组

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值