Python爬虫JSON及JSONPath运行原理详解


Posted in Python onJune 04, 2020

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。

JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。

JsonPath 对于 JSON 来说,相当于 XPATH 对于 XML。

JsonPath与XPath语法对比:

Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法。

Python爬虫JSON及JSONPath运行原理详解

相关推荐:《Python相关教程》

利用JSONPath爬取拉勾网上所有的城市

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib2
# json解析库,对应到lxml
import json
# json的解析语法,对应到xpath
import jsonpath
url = "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"))

结果:

Python爬虫JSON及JSONPath运行原理详解

糗事百科爬取

利用XPATH的模糊查询

获取每个帖子里的内容

保存到 json 文件内

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib2
import json
from lxml import etree
url = "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") + "
")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python格式化字符串实例总结
Sep 28 Python
python中split方法用法分析
Apr 17 Python
对python中两种列表元素去重函数性能的比较方法
Jun 29 Python
在python里从协程返回一个值的示例
Feb 19 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
Python将视频或者动态图gif逐帧保存为图片的方法
Sep 10 Python
pygame库实现移动底座弹球小游戏
Apr 14 Python
python实现飞船游戏的纵向移动
Apr 24 Python
浅析python字符串前加r、f、u、l 的区别
Jan 24 Python
Python使用openpyxl复制整张sheet
Mar 24 Python
教你使用一行Python代码玩遍童年的小游戏
Aug 23 Python
Python torch.flatten()函数案例详解
Aug 30 Python
python 实现图像快速替换某种颜色
Jun 04 #Python
python下对hsv颜色空间进行量化操作
Jun 04 #Python
Python-opencv实现红绿两色识别操作
Jun 04 #Python
Python基于pandas绘制散点图矩阵代码实例
Jun 04 #Python
Python使用plt.boxplot() 参数绘制箱线图
Jun 04 #Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
Jun 04 #Python
Python中操作各种多媒体,视频、音频到图片的代码详解
Jun 04 #Python
You might like
自己做矿石收音机
2021/03/02 无线电
windows下升级PHP到5.3.3的过程及注意事项
2010/10/12 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
浅谈PHP无限极分类原理
2019/03/14 PHP
js资料prototype 属性
2007/03/13 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
document.write的几点使用心得
2014/05/14 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
2016/08/06 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
使用layer弹窗,制作编辑User信息页面的方法
2019/09/27 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
Vue.js使用axios动态获取response里的data数据操作
2020/09/08 Javascript
python基础教程之数字处理(math)模块详解
2014/03/25 Python
python编写的最短路径算法
2015/03/25 Python
通过Python 接口使用OpenCV的方法
2018/04/02 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
2019/01/29 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
俄罗斯游戏商店:Buka
2020/03/01 全球购物
护理专业自我鉴定
2014/01/30 职场文书
财务会计毕业生个人求职信
2014/02/03 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
创业计划书之寿司
2019/07/19 职场文书
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server