当前位置:
首页 > temp > 简明python教程 >
-
Python爬虫之JSON和JSONPath是如何正确运用的?案例详解
JSON和JSONPath
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。
注意:光理论是不够的。这里顺便免费送大家一套2020最新python入门到高级项目实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,还可以跟老司机交流讨教!
JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。
JsonPath 对于 JSON 来说,相当于 XPATH 对于 XML。
JsonPath与XPath语法对比:
Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法。

相关推荐:《Python相关教程》
利用JSONPath爬取拉勾网上所有的城市
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#!/usr/bin/env python# -*- coding:utf-8 -*-import urllib2# json解析库,对应到lxmlimport json# json的解析语法,对应到xpathimport jsonpathurl = "http://www.lagou.com/lbs/getAllCitySearchLabels.json"headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'}request = urllib2.Request(url, headers = headers)response = urllib2.urlopen(request)# 取出json文件里的内容,返回的格式是字符串html = response.read()# 把json形式的字符串转换成python形式的Unicode字符串unicodestr = json.loads(html)# Python形式的列表city_list = jsonpath.jsonpath(unicodestr, "$..name")#for item in city_list:# print item# dumps()默认中文为ascii编码格式,ensure_ascii默认为Ture# 禁用ascii编码格式,返回的Unicode字符串,方便使用array = json.dumps(city_list, ensure_ascii=False)#json.dumps(city_list)#array = json.dumps(city_list)with open("lagoucity.json", "w") as f: f.write(array.encode("utf-8")) |
结果:

糗事百科爬取
利用XPATH的模糊查询
获取每个帖子里的内容
保存到 json 文件内
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#!/usr/bin/env python# -*- coding:utf-8 -*-import urllib2import jsonfrom lxml import etreeurl = "http://www.qiushibaike.com/8hr/page/2/"headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'}request = urllib2.Request(url, headers = headers)html = urllib2.urlopen(request).read()# 响应返回的是字符串,解析为HTML DOM模式 text = etree.HTML(html)text = etree.HTML(html)# 返回所有段子的结点位置,contains()模糊查询方法,第一个参数是要匹配的标签,第二个参数是标签名部分内容node_list = text.xpath('//div[contains(@id, "qiushi_tag")]')items ={}for node in node_list: # xpath返回的列表,这个列表就这一个参数,用索引方式取出来,用户名 username = node.xpath('./div/a/@title')[0] # 取出标签下的内容,段子内容 content = node.xpath('.//div[@class="content"]/span')[0].text # 取出标签里包含的内容,点赞 zan = node.xpath('.//i')[0].text # 评论 comments = node.xpath('.//i')[1].text items = { "username" : username, "content" : content, "zan" : zan, "comments" : comments } with open("qiushi.json", "a") as f: f.write(json.dumps(items, ensure_ascii=False).encode("utf-8") + "") |
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数













