python爬虫之解析模块
2019-08-16 本文已影响0人
行走世间的狮子
json模块 ---> json
1. 什么是json?
javascript中的对象和数组
对象 :{key: value, ...}
数组 :[value, value, ...]
2. 作用
json格式的字符串 和 Python数据类型 之间的转换
3. 常用方法
- p = json.loads(s)
- 功能: 把json格式字符串转为Python数据类型对象,json的对象转为-python的字典,json的数组转为python的列表
- 参数: json格式字符串
- 返回值: python数据类型对象
- s = json.dumps(p, ensure_ascii=True)
- 功能: 把python数据类型对象转为json格式字符串
- 参数:
p : python数据类型对象
ensure_ascii : 默认使用ascii编码 - 返回值: json格式字符串
4. 补充函数
# 能把字符串里的内容转换为一句python语句
s = '{"a": 1, "b": 2}'
print(type(eval(s))) # ---> dict
s = '[1, 2, 3, 4, 5]'
print(type(eval(s))) # ---> list
re模块 ---> 万能
1. 正则方法
- p = re.compile(s[, re.S])
- 功能:编译正则表达式
- 参数:
s: 正则表达式
re.S: 让.可以匹配\n - 返回值:编译对象
- r_list = p.findall(html)
- 功能: 根据正则表达式在html里进行匹配
- 参数: 需要匹配的字符串
- 返回值:
- 若不分组,则返回所有匹配的内容组成的列表
[结果1, 结果2, 结果3, ...] - 若分组,则把每个分组匹配结果组成元组,再以列表的形式返回全部匹配结果
[(group1, gourp2, ...), (), () ...]
- 若不分组,则返回所有匹配的内容组成的列表
2. 注意内容
贪婪匹配(.), 非贪婪匹配(.?):非贪婪匹配尽可能少的匹配字符串,爬虫解析中多用非贪婪匹配
lxml模块 ---> HTML
1. 什么是xpath?
xpath是在XML文档中查找信息的语言,同样适用于HTML文档的检索
2. xpath辅助工具
- Chrome插件 :XPath Helper
打开/关闭 :Ctrl + Shift + X - Firefox插件 :XPath checker
- XPath表达式编辑工具 :XML quire
3. 语法
- / : 从根节点开始选取
- // : 从整个文档中查找节点
eg: //price 、 /bookstore/book//price
- @ : 选取某个节点的属性
eg: /title[@lang="en"]
- @的使用:
- 选取1个节点 :
//title[@lang="en"]
- 选取N个节点 :
//title[@lang]
- 选取节点的属性值 :
//title/@lang
- 选取1个节点 :
- @的使用:
- | : 匹配多路径
eg:
//book/title | //book/price`: 获取所有book节点下的 title节点和price节点 - contains() : 匹配一个属性值中包含某些字符串的节点
eg: //title[contains(@lang,"e")]
- text() : 获取节点中的文本
eg: //title[contains(@lang,"e")]/text() - 节点对象.text : 获取节点中的文本
4. 使用
from lxml import etree
# 利用lxml库的etree模块创建解析对象
parseHtml = etree.HTML(html)
# 解析对象调用xpath工具定位节点信息
r_list = parseHtml.xpath('xpath表达式')
# 返回值:
# 若xpath表达式里已经获取文本,则返回文本列表
# 若没有,则返回节点对象列表,调用text属性可获取文本,也可再调用xpath进一步解析