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中的Queue与多进程
Aug 25 Python
Python选课系统开发程序
Sep 02 Python
Python实现压缩与解压gzip大文件的方法
Sep 18 Python
Unicode和Python的中文处理
Mar 19 Python
Python制作Windows系统服务
Mar 25 Python
numpy使用技巧之数组过滤实例代码
Feb 03 Python
tensorflow 打印内存中的变量方法
Jul 30 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
用Python编写一个简单的CS架构后门的方法
Nov 20 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
Jun 04 Python
Python3常用内置方法代码实例
Nov 18 Python
Python 实现日志同时输出到屏幕和文件
Feb 19 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
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
PHP遍历数组的方法汇总
2015/04/30 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
js面试题之异步问题的深入理解
2020/09/20 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
python开启多个子进程并行运行的方法
2015/04/18 Python
Python命令行解析模块详解
2018/02/01 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
Python画图高斯分布的示例
2019/07/10 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
python 变量初始化空列表的例子
2019/11/28 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
生产厂厂长岗位职责
2013/12/25 职场文书
思想专业自荐信范文
2013/12/25 职场文书
英语国培研修感言
2014/02/13 职场文书
年度献血先进个人事迹材料
2014/02/14 职场文书
2015年化工厂工作总结
2015/05/04 职场文书
电工生产实习心得体会
2016/01/22 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
详解PHP Swoole与TCP三次握手
2021/05/27 PHP
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js