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统计cpu利用率的方法
Jun 02 Python
Python中json格式数据的编码与解码方法详解
Jul 01 Python
Django Highcharts制作图表
Aug 27 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
python selenium 对浏览器标签页进行关闭和切换的方法
May 21 Python
Python docx库用法示例分析
Feb 16 Python
Python递归函数实例讲解
Feb 27 Python
python 猴子补丁(monkey patch)
Jun 26 Python
keras 读取多标签图像数据方式
Jun 12 Python
python两个list[]相加的实现方法
Sep 23 Python
Pytorch中的学习率衰减及其用法详解
Jun 05 Python
聊聊基于pytorch实现Resnet对本地数据集的训练问题
Mar 25 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往windows中添加用户
2006/12/06 PHP
php实现的MySQL通用查询程序
2007/03/11 PHP
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
jquery队列函数用法实例
2014/12/16 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
原生js图片轮播效果实现代码
2016/10/19 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
2018/08/16 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
使用RxJS更优雅地进行定时请求详析
2019/06/02 Javascript
Python中的数学运算操作符使用进阶
2016/06/20 Python
Python利用Beautiful Soup模块搜索内容详解
2017/03/29 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
pycharm运行scrapy过程图解
2019/11/22 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
2020/11/05 Python
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
网上常见的一份Linux面试题(多项选择部分)
2014/09/09 面试题
安全检查管理制度
2014/02/02 职场文书
称象教学反思
2014/02/03 职场文书
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
会计专业导师推荐信
2014/03/08 职场文书
法定代表人授权委托书
2014/09/19 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python