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访问MySQL封装的常用类实例
Nov 11 Python
使用Kivy将python程序打包为apk文件
Jul 29 Python
Python3调用微信企业号API发送文本消息代码示例
Nov 10 Python
python中文乱码不着急,先看懂字节和字符
Dec 20 Python
matplotlib实现热成像图colorbar和极坐标图的方法
Dec 13 Python
对python中if语句的真假判断实例详解
Feb 18 Python
使用python求解二次规划的问题
Feb 29 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
Apr 13 Python
详解pycharm自动import所需的库的操作方法
Nov 30 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 Python
Python使用UDP实现720p视频传输的操作
Apr 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 header()函数使用说明
2008/07/10 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
2014/04/15 Javascript
3种js实现string的substring方法
2015/11/09 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
基于jquery实现五星好评
2017/11/18 jQuery
JavaScript实现短暂提示框功能
2018/04/04 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
2018/09/28 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
python传递参数方式小结
2015/04/17 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
python获取网页中所有图片并筛选指定分辨率的方法
2018/03/31 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Python字典遍历操作实例小结
2019/03/05 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
python简单实现9宫格图片实例
2020/09/03 Python
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
西班牙著名的珠宝首饰品牌:P D PAOLA
2018/09/15 全球购物
帕克纽约:PARKER NY
2018/12/09 全球购物
EJB的几种类型
2012/08/15 面试题
中层竞聘演讲稿
2014/01/09 职场文书
护士毕业生自我鉴定
2014/02/08 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
高中生逃课检讨书
2014/10/10 职场文书