一、安装
通过命令:pip3 install Beautifulsoup4;
安装后运行:from bs4 import BeautifulSoup,没有报错,说明安装正常;
二、解析库
Beautifulsoup有四种解析方法:
1、BeautifulSoup(markup,"html.parser") 解析速度适中,文档容错能力强
2、BeautifulSoup(markup,"lxml") 解析速度快,文档容错能力强,但是需要安装C语言库
3、BeautifulSoup(markup,"xml") 解析速度快,唯一支持XML的解析器,但是需要安装C语言库
4、BeautifulSoup(markup,"html5lib") 最好的容错性,以浏览的方式解析文档,生成HTML5格式的文档,但是解析速度慢
三、基本使用
![](https://i-blog.csdnimg.cn/blog_migrate/aab77e7365225bbefeabdc3b1a9bfc42.png)
使用type查看获取tag的类型发现,每个标签的类型都是
<class 'bs4.element.Tag'>,也就是说通过soup.title这样的形式获取的类型都是Tag类型;
四、常用标签选择器
1、选择元素:与HTML中的标签一样,直接获取对应名称;
![](https://i-blog.csdnimg.cn/blog_migrate/38990088f14c01cd93a75ee95cda1aa7.png)
2、获取名称:通过name属性,可以直接获取到标签的名称;
![](https://i-blog.csdnimg.cn/blog_migrate/d3fb93136cbb8793e0ae3325a3b3ab7a.png)
3、获取属性:通过attrs属性获取属性值,或者直接获取属性值;
![](https://i-blog.csdnimg.cn/blog_migrate/76c6e74c0fb89dfdb1cc1f0eb888a234.png)
4、获取内容
![](https://i-blog.csdnimg.cn/blog_migrate/1b60b7ffa290d3fb910c12dca6607212.png)
5、嵌套选择
![](https://i-blog.csdnimg.cn/blog_migrate/a48d25582c19d2c48079705dd6576fbc.png)
6、子节点:代码中存在层级结构
contents属性:返回形式是列表形式;
![](https://i-blog.csdnimg.cn/blog_migrate/7d5e5a4b1154ace5ddfbac2c326a0627.png)
children属性:返回形式是列表类型,需要通过迭代的方式将里面数据取出(使用enumerate属性);
![](https://i-blog.csdnimg.cn/blog_migrate/6932df1a53e57833a3d014f22cb4d2d0.png)
descendants属性:返回形式也是列表类型,但是会将标签页下面的所有节点返回(使用enumerate属性);
![](https://i-blog.csdnimg.cn/blog_migrate/5c899171b725bb7cdc1b209ff8ab98cb.png)
7、父节点:父节点类型是Tag类型;
![](https://i-blog.csdnimg.cn/blog_migrate/4c14260326104a4cbda6aa0517f660fe.png)
8、兄弟节点:
next_siblings:获取下面的兄弟节点;
![](https://i-blog.csdnimg.cn/blog_migrate/3e0f51e65a83c9c723a6fb992bf1afc5.png)
previous_siblings:获取前面的兄弟节点;
![](https://i-blog.csdnimg.cn/blog_migrate/de38f5ffc8965918ef45b539c3267215.png)
五、文档树搜索
1、find_all(name, attrs, recursive, text, **kwargs):根据标签名,属性,内容进行查找,返回所有元素;
name:根据标签名查找标签,返回查找的所有元素
![](https://i-blog.csdnimg.cn/blog_migrate/ef6aa210fdeffefd63dbf20143928394.png)
attrs:根据属性名进行查找,返回所有元素(注:使用class进行查找元素,因为class在Python中相当于一个关键字,不能当做参数进行使用,需要使用class_当做参数进行使用)
![](https://i-blog.csdnimg.cn/blog_migrate/bf7e6e013325d0b40a56bbe3bdb4bfea.png)
text:根据内容进行查找,返回所有元素
![](https://i-blog.csdnimg.cn/blog_migrate/52349c38cb36f4c1cb2c5df8f8ea5356.png)
2、find(name, attrs, recursive, text, **kwargs):根据标签名,属性,内容进行查找,返回单个元素;
六、CSS选择器
通过select()直接传入CSS参数即可;
![](https://i-blog.csdnimg.cn/blog_migrate/8d650631001efbe4f17b818cb44a966e.png)
1、获取属性:
![](https://i-blog.csdnimg.cn/blog_migrate/cfbdbc4d68b33562fc20045a117d6de1.png)
2、获取内容:
![](https://i-blog.csdnimg.cn/blog_migrate/a371fcd0083d2b785019e471dffd8c7c.png)