解析器的使用
发请求只是第一步。
真正有价值的是:把拿到的 HTML 或 JSON 解析成你想要的数据。
HTML 文档解析
当响应内容是 HTML 时,你通常要做两件事:
- 定位节点
- 提取文本或属性
lxml
lxml 是非常常用的 HTML 解析库。
安装:
bash
pip install lxml最基础示例:
python
from lxml import etree
html = """
<html>
<body>
<h1>Python 学习</h1>
<a href="https://example.com">进入</a>
</body>
</html>
"""
tree = etree.HTML(html)
title = tree.xpath("//h1/text()")
link = tree.xpath("//a/@href")
print(title)
print(link)输出:
text
['Python 学习']
['https://example.com']节点操作
你经常会做:
- 找标题节点
- 找列表节点
- 找表格节点
属性操作
有些数据不在节点文本里,而是在属性中,例如:
- 链接地址
href - 图片地址
src
JSON 文档解析
如果响应返回的是 JSON,就不需要 lxml,而是直接解析 JSON。
python
import json
text = '{"name": "小明", "age": 18}'
data = json.loads(text)
print(data["name"])jsonpath
当 JSON 层级很深时,jsonpath 会更方便。
它的作用,和 XPath 对 HTML 的价值有点像。
学解析器时最重要的目标
- 能从 HTML 中提取文字和链接
- 能从 JSON 中取值
- 知道什么时候用 XPath,什么时候直接解析 JSON