3.爬虫-BeautifulSoup

解析库:

基本使用方法

.prettyify():把html调整为标准格式,如图可以观察到该html缺少和的闭合标签,而.prettify()方法直接将该html格式补全。

直接使用soup.title.string方法就可以得到title里面的内容:

标签选择器:

获取标签名称:

获取属性值

获取标签内容

嵌套选择,用点分割:

获取子节点,子孙节点

下图为获取P节点下的子节点,p.contents

还有另一种方法获取P标签下的子节点:p.children

.children和.content的区别就是.children实际上是个迭代器,需要用循环的方式来取其中的内容,而.contetnts是一个列表形式,你可以解开上图的print(soup.p.contents)代码,观察下二者的不同。

获取子孙节点 .descendants, 标签a下的子节点span同样也输出出来了,span是p标签的孙节点:

获取父节点、祖先节点

获取第一个a标签的父节点,a.parent


获取第一个a标签的祖先节点,a.parents:


获取兄弟节点

.next_siblings   .previous_siblings

标准选择器

find_all(name, attrs, recursive, text, **kwargs) 可根据标签、属性、内容查找

根据标签名name查找

根据attrs,其传入的类型是字典类型

有些特殊的属性可以直接取值,但class是某些语言的关键字,所以取值时需要加个下划线:class_

根据text文本内容来选择,返回的是里面的内容:

find(name, attrs, recursive, text, **kwargs) 用法与find_all相同

find 与 find_all的区别是find返回一个元素,find_all返回所有元素

CSS选择器

通过select()直接传入CSS选择器即可完成选择

获取属性

获取内容

总结

1. 推荐使用lxml解析库,如果出现代码混乱的情况使用html.parser或html5lib

2. 标签选择筛选功能弱但是速度快

3. 建议使用find()、find_all()查询匹配单个结果或者多个结果

4. 如果对CSS选择器熟悉建议使用select()

5. 记住常用的获取属性和文本的方法

你可能感兴趣的:(3.爬虫-BeautifulSoup)