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的Django框架中生成CSV文件的方法
Jul 22 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
python中利用xml.dom模块解析xml的方法教程
May 24 Python
python使用pip安装SciPy、SymPy、matplotlib教程
Nov 20 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
python 装饰器功能与用法案例详解
Mar 06 Python
150行python代码实现贪吃蛇游戏
Apr 24 Python
使用Python实现微信拍一拍功能的思路代码
Jul 09 Python
pycharm如何使用anaconda中的各种包(操作步骤)
Jul 31 Python
python实现画图工具
Aug 27 Python
用python计算文件的MD5值
Dec 23 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 11 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
自己做矿石收音机
2021/03/02 无线电
PHP中的超全局变量
2006/10/09 PHP
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
js中关于String对象的replace使用详解
2011/05/24 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
js实现交换运动效果的方法
2015/04/10 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
微信小程序 http请求的session管理
2017/06/07 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
详解vue 组件
2020/06/11 Javascript
python list转dict示例分享
2014/01/28 Python
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
艺术用品:Arteza
2018/11/25 全球购物
大学生标准推荐信范文
2013/11/25 职场文书
公司口号大全
2014/06/11 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
深入详解JS函数的柯里化
2021/06/09 Javascript