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实现抓取百度搜索结果页的网站标题信息
Jan 22 Python
在Gnumeric下使用Python脚本操作表格的教程
Apr 14 Python
让python 3支持mysqldb的解决方法
Feb 14 Python
用Python写一段用户登录的程序代码
Apr 22 Python
python+selenium 定位到元素,无法点击的解决方法
Jan 30 Python
numpy基础教程之np.linalg
Feb 12 Python
使用Django简单编写一个XSS平台的方法步骤
Mar 25 Python
Python函数和模块的使用总结
May 20 Python
使用jupyter notebook直接打开.md格式的文件
Apr 10 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
Apr 19 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 Python
pandas取dataframe特定行列的实现方法
May 24 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
PHP中的正规表达式(一)
2006/10/09 PHP
PHP新手上路(七)
2006/10/09 PHP
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
微信支付扫码支付php版
2016/07/22 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
2008/11/06 Javascript
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
jQuery中Ajax的load方法详解
2015/01/14 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
将鼠标焦点定位到文本框最后(代码分享)
2017/01/11 Javascript
Bootstrap面板使用方法
2017/01/16 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
解决layui表格的表头不滚动的问题
2019/09/04 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
django实现模型字段动态choice的操作
2020/04/01 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
Python接口测试文件上传实例解析
2020/05/22 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
进修护士自我鉴定
2013/10/14 职场文书
培训演讲稿范文
2014/01/12 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
党员对照检查材料
2014/09/22 职场文书
管理人员岗位职责
2015/02/14 职场文书
小学班主任个人总结
2015/03/03 职场文书
超市食品安全承诺书
2015/04/29 职场文书
Python基础学习之奇异的GUI对话框
2021/05/27 Python
Nginx 常用配置
2022/05/15 Servers