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实现方式详解
Mar 20 Python
Python实现读取机器硬件信息的方法示例
Jun 09 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
Python面向对象之类的定义与继承用法示例
Jan 14 Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 Python
华为2019校招笔试题之处理字符串(python版)
Jun 25 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
django中瀑布流写法实例代码
Oct 14 Python
mac使用python识别图形验证码功能
Jan 10 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
Python JSON常用编解码方法代码实例
Sep 05 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
Apr 13 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利用DWZ.CN服务生成短网址
2019/08/11 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
jQuery实现获取绑定自定义事件元素的方法
2015/12/02 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
在Python中使用PIL模块对图片进行高斯模糊处理的教程
2015/05/05 Python
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
Python collections.deque双边队列原理详解
2020/10/05 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
银行先进个人事迹材料
2014/05/11 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
作风建设剖析材料
2014/10/06 职场文书
个人党性分析材料
2014/12/19 职场文书
学生检讨书怎么写
2015/05/07 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
如何用PHP实现多线程编程
2021/05/26 PHP
MySQL通过binlog恢复数据
2021/05/27 MySQL
vue项目多环境配置(.env)的实现
2021/07/21 Vue.js
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL