
这一章的核心就是“如何从获取到的数据中提取我们想要的信息”。这一章介绍了三种主流的解析工具xpath、jsonpath和BeautifulSoup。 第一部分XPath 解析XPath 是一种在 XML 和 HTML 文档中查找信息的语言功能强大且语法灵活。1. 环境准备浏览器插件在 Chrome 浏览器中安装 XPath Helper 插件方便在开发者工具中调试 XPath 路径。Python 库安装lxml库。pip install lxml -i https://pypi.douban.com/simple2. 核心用法导入库from lxml import etree创建解析对象解析本地文件html_tree etree.parse(XX.html)解析服务器响应html_tree etree.HTML(response.read().decode(utf-8))执行解析html_tree.xpath(xpath路径)3. XPath 基本语法语法说明示例//查找所有子孙节点不考虑层级//div/查找直接子节点/div/p[属性]谓词查询根据属性筛选//div[id][属性值]精确匹配属性值//div[idmain]//属性查询所有节点的指定属性//class/text()获取标签内的文本内容//div/h1/text()contains()模糊查询属性值包含某字符串//div[contains(id, he)]starts-with()模糊查询属性值以某字符串开头//div[starts-with(id, he)]and逻辑运算同时满足多个条件//div[idhead and classs_down]逻辑运算或 第二部分JsonPath 解析当数据接口返回的是 JSON 格式时使用 JsonPath 比正则表达式或字符串处理要高效得多。1. 环境准备安装库pip install jsonpath2. 核心用法加载 JSON 对象import json import jsonpath # 从文件加载 obj json.load(open(data.json, r, encodingutf-8)) # 或从字符串加载 # obj json.loads(response_text)执行解析ret jsonpath.jsonpath(obj, jsonpath语法)Jsonpath使用参考http://blog.csdn.net/luxideyao/article/details/77802389 第三部分BeautifulSoup 解析BeautifulSoup简称 bs4是另一个非常流行的 HTML/XML 解析库以接口设计人性化著称。1. 核心简介优点接口设计人性化使用方便容错性强。缺点解析效率通常低于lxml。2. 环境准备与创建对象安装库pip install bs4导入库from bs4 import BeautifulSoup创建对象# 解析服务器响应 soup BeautifulSoup(response.read().decode(), lxml) # 解析本地文件 (注意指定编码) soup BeautifulSoup(open(1.html, encodingutf-8), lxml)3. 节点定位查找数据根据标签名查找soup.a只能找到第一个a标签。find 系列方法find(a)返回第一个匹配的标签对象。find(a, title名字)根据属性查找。find(a, class_名字)注意因为class是 Python 关键字所以要写成class_。find_all(a)返回所有匹配的标签对象列表。find_all([a, span])查找所有a和span标签。find_all(a, limit2)只查找前两个。select 方法推荐支持 CSS 选择器语法功能强大。标签选择器soup.select(p)类选择器soup.select(.firstname)ID 选择器soup.select(#firstname)属性选择器soup.select(li[class])或soup.select(li[classvalue])层级选择器后代选择器div p(div 内部所有的 p)子选择器div p(div 的直接子元素 p)组合选择器soup.select(div, span)(查找所有 div 和 span)4. 节点信息提取获取文本内容obj.string获取标签内的字符串。obj.get_text()推荐能获取标签内所有文本即使有嵌套标签。获取标签名tag.name获取所有属性tag.attrs(返回一个字典)获取单个属性值obj.attrs.get(title)常用如果属性不存在返回None不会报错。obj.get(title)obj[title]如果属性不存在会报错。 总结与建议解析方式适用场景特点XPathHTML/XML 文档语法灵活功能强大效率高JsonPathJSON 数据处理 API 接口返回的 JSON 数据非常方便BeautifulSoupHTML/XML 文档接口友好上手简单容错性好