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中SocketServer模块处理网络请求的用法
Jun 28 Python
网站渗透常用Python小脚本查询同ip网站
May 08 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
Mar 30 Python
python 在某.py文件中调用其他.py内的函数的方法
Jun 25 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
Python上下文管理器用法及实例解析
Nov 11 Python
Pycharm最新激活码2019(推荐)
Dec 31 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
python实现批量命名照片
Jun 18 Python
通过实例解析python创建进程常用方法
Jun 19 Python
python中的错误如何查看
Jul 08 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
Jan 05 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
PHPlet在Windows下的安装
2006/10/09 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
php命名空间学习详解
2014/02/27 PHP
降低PHP Redis内存占用
2017/03/23 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
2015/12/24 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
nodejs发送http请求时遇到404长时间未响应的解决方法
2017/12/10 NodeJs
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
js前端对于大量数据的展示方式及处理方法
2020/12/02 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
Python画图学习入门教程
2016/07/01 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
python中的print()输出
2019/04/12 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
Pandas时间序列:时期(period)及其算术运算详解
2020/02/25 Python
Python 存取npy格式数据实例
2020/07/01 Python
python 录制系统声音的示例
2020/12/21 Python
荷兰家电销售网站:Welhof
2020/12/08 全球购物
一套英文Java笔试题面试题
2016/04/21 面试题
Delphi工程师笔试题
2013/09/21 面试题
车工岗位职责
2013/11/26 职场文书
转预备党员政审材料
2014/02/06 职场文书
车间机修工岗位职责
2014/02/28 职场文书
新郎接新娘保证书
2015/05/08 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python