# 爬虫数据提取
数据响应之后数据分为2种
1.json字符串----现在的单页应用都是通过ajax发送请求获取json数据,渲染到页面中的
解析:json模板,jsonpath模块解析
2.html字符串----直接返回的html字符串 (个人感觉xpath语法定位精确很麻烦,推荐pyquery模块)
解析:lxml模块(xpath语法),pyQuery模板(类似jQuery,css3选择器一样,直接选择元素)
# jsonpath 模块的应用
1.安装 jsonpath模块
pip install jsonpath
2.jsonpath模块的提取方法
from jsonpath import jsonpath
ret = jsonpath(要提取的数据, 'jsonpath语法规则')
3.jsonpath语法股则
$ 根目录
@ 现行节点
. or [] 取子节点
.. 不管什么位置,选取所有符合条件的数据
* 匹配所有元素节点
4.jsonpath模块的实例
book_dict = {
"store": {
"book": [
{ "category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{ "category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{ "category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{ "category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
from jsonpath import jsonpath
print(jsonpath(book_dict, '$..author')) # 如果取不到将返回False
5.jsonpath模块的使用
json文件网址:https://blog.dbsgw.cn/dz.json 为了是json数据的处理,直接使用get方式了
import requests
import json
import jsonpath
url = 'https://blog.dbsgw.cn/dz.json'
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
}
r = requests.get(url, headers=headers)
# print(r.content.decode())
# 把json格式字符串转换为python对象
a = json.loads(r.content.decode())
# aa = jsonpath.jsonpath(a, '$..name') # 获取根目录下 所有的 name属性(也就是获取根目录下所有的 名称)
aa = jsonpath.jsonpath(a, '$..A..name') #获取根目录下的所有 A字段下面的 所有 name
print(aa)
# pyquery的模块的应用(这里不讲lxml,毕竟css3选择器对 前端人员来说简单些)
1.安装pyquery
pip install pyquery
2.pyquery的使用
from pyquery import PyQuery as pq #引入 注意 pyQuery 中的 Q 一定要大写
html = '<div><h1></h1></div>' #数据
doc = pq(html) #转换为pyquery能处理的数据
print(doc('h2')) #选取h2标签打印输出
3.pyquery的基本语法
.text() #是获取文本内容
.items() #获取元素当前每一项(类似python中的items())
.attr('href') #获取属性上面的 href
4.pyquery实例
import requests
from pyquery import PyQuery as pq
url = 'https://blog.dbsgw.cn/'
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
}
r = requests.get(url, headers=headers)
doc = pq(r.content)
# print(doc('a')) # 获取所有的a链接
for i in doc('a').items(): #切记一定要加 items()在循环 ,不然显示的不是html元素
print(i.attr('href')) #获取所有a链接 上的链接
print(i.text()) #获取所有a链接里面的文字
print(doc('.content article')) # 选择所以文章
发表评论