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 HTMLParser模块解析html获取url实例
Apr 08 Python
Eclipse中Python开发环境搭建简单教程
Mar 23 Python
Python的Tornado框架实现图片上传及图片大小修改功能
Jun 30 Python
python3 cvs将数据读取为字典的方法
Dec 22 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
用Python将Excel数据导入到SQL Server的例子
Aug 24 Python
Python代理IP爬虫的新手使用教程
Sep 05 Python
Python多继承以及MRO顺序的使用
Nov 11 Python
详解Python在使用JSON时需要注意的编码问题
Dec 06 Python
pytorch动态网络以及权重共享实例
Jan 06 Python
浅谈在django中使用redirect重定向数据传输的问题
Mar 13 Python
python-for x in range的用法(注意要点、细节)
May 10 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
解析dedeCMS验证码的实现代码
2013/06/07 PHP
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
2008/12/02 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
js中获取事件对象的方法小结
2011/03/13 Javascript
一个JavaScript的求爱小特效
2014/05/09 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
JavaScript中自带的 reduce()方法使用示例详解
2016/08/10 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
2018/12/20 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
python实现2048小游戏
2015/03/30 Python
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
Python中的集合类型知识讲解
2015/08/19 Python
pandas获取groupby分组里最大值所在的行方法
2018/04/20 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
Python中bisect的用法及示例详解
2020/07/20 Python
python logging 重复写日志问题解决办法详解
2020/08/04 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
2021/01/12 Python
PyCharm 光标变成黑块的解决方式
2021/02/06 Python
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
校长岗位职责
2013/11/26 职场文书
政府采购方案
2014/06/12 职场文书
个人廉政承诺书
2015/04/28 职场文书
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
如何正确理解python装饰器
2021/06/15 Python