爬虫 - 网页解析库
BeautifulSoup
BeautifulSoup 是一个Python库,用于从 HTML 提取数据
它提供了简单而灵活的方式来遍历和搜索文档树,以及解析和提取所需的数据
安装
BeautifulSoup的安装涉及第三方的扩展
pip3 install beautifulsoup4
Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是 lxml
pip install lxml
基本使用

遍历文档树
遍历文档树:即直接通过标签名字选择,特点是选择速度快,但如果存在多个相同的标签则只返回第一个
soup为上文获取的网页解析对象
-
soup.标签名:获取标签对象

-
soup.标签名.name:获取标签的名称

-
soup.标签名.attrs获取标签的属性

-
获取标签的内容
-
soup.标签名.string:某标签下的文本只有一个时,取到,否则为None


-
soup.标签名.strings:拿到一个生成器对象, 取到某标签下所有的文本内容

-
soup.标签名.text:取到某标签下所有的文本内容

-
soup.标签名.stripped_strings:去掉空白

-
-
嵌套选择

-
子节点、子孙节点
-
soup.标签名.contents:某标签下所有子节点

-
soup.标签名.children:得到一个迭代器,包含某标签下所有子节点

-
-
父节点、祖先节点
-
soup.标签名.parent:获取父节点

-
soup.标签名.parents:获取父节点的父节点,生成器

-
搜索文档树
find 和 find_all
两者的唯一区别是:find_all() 方法的返回结果是值包含一个元素的列表,而 find() 方法直接返回结果
-
name:搜索name参数的值可以使任一类型的 过滤器

-
keyword:key=value的形式,value可以是过滤器:字符串 , 正则表达式,列表, True
注意class是关键字,所以要加
_
-
按照类名查找
查找class = post-meta-item 的span标签

-
limit:find_all限制条数
查找class = post-meta-item 的span标签,输出两条结果

五种过滤器
-
字符串:即标签名

-
正则表达式

-
列表
如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回.下面代码找到文档中所有<a>标签和<p>标签:

-
True
可以匹配任何值,下面代码查找到所有的tag,但是不会返回字符串节点

CSS选择器
暂不赘述
Xpath
from lxml import etree
XPath 是一门在 XML 文档中查找信息的语言
节点
-
所有节点

-
指定节点(结果为列表)

-
子节点,子孙节点

-
父节点


属性匹配

-
文本获取

-
属性获取

| 表达式 | 含义 |
|---|---|
| nodename | 选取此层级节点下的所有子节点 |
| / | 代表从根节点进行选取 |
| // | 可以理解为匹配,就是在所有节点中选取此节点,直到匹配为止 |
| . | 选取当前节点 |
| … | 选取当前节点上一层(上一级目录) |
| @ | 选取属性(也是匹配) |