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中set常用操作汇总
Jun 30 Python
Python排序搜索基本算法之插入排序实例分析
Dec 11 Python
python多维数组切片方法
Apr 13 Python
运行django项目指定IP和端口的方法
May 14 Python
如何使用python把ppt转换成pdf
Jun 29 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
Aug 09 Python
python os.path.isfile()因参数问题判断错误的解决
Nov 29 Python
python使用正则来处理各种匹配问题
Dec 22 Python
Tensorflow 多线程设置方式
Feb 06 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
Mar 23 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
python 实现IP子网计算
Feb 18 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
SONY ICF-F10中波修复记
2021/03/02 无线电
php中大括号作用介绍
2012/03/22 PHP
PHP基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
php检测useragent版本示例
2014/03/24 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
必须收藏的23个php实用代码片段
2016/02/02 PHP
Nginx实现反向代理
2017/09/20 Servers
SWFObject Flash js调用类
2008/07/08 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
js获取内联样式的方法
2015/01/27 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
python安装与使用redis的方法
2016/04/19 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
Pandas读取csv时如何设置列名
2020/06/02 Python
python 监控logcat关键字功能
2020/09/04 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
经典婚礼主持开场白
2014/03/13 职场文书
初二学习计划书范文
2014/04/27 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
单位婚育证明范本
2014/11/21 职场文书
五年级数学教学反思
2016/02/16 职场文书
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js