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中的25个隐藏特性
Mar 30 Python
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
Python3操作SQL Server数据库(实例讲解)
Oct 21 Python
转换科学计数法的数值字符串为decimal类型的方法
Jul 16 Python
python字典值排序并取出前n个key值的方法
Oct 17 Python
Python中常用的8种字符串操作方法
May 06 Python
Django中的用户身份验证示例详解
Aug 07 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
Mar 19 Python
python对XML文件的操作实现代码
Mar 27 Python
python 利用 PIL 将数组值转成图片的实现
Apr 12 Python
Pytest之测试命名规则的使用
Apr 16 Python
Python机器学习之PCA降维算法详解
May 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
PHP中的类-什么叫类
2006/11/20 PHP
php与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
深入PHP FTP类的详解
2013/06/13 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
2017/07/04 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
设置checkbox为只读(readOnly)的两种方式
2013/10/11 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
js 获取、清空input type="file"的值(示例代码)
2013/12/24 Javascript
javascript实现页面内关键词高亮显示代码
2014/04/03 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
浅谈Python中的闭包
2015/07/08 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
Python读取视频的两种方法(imageio和cv2)
2018/04/15 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
Python-ElasticSearch搜索查询的讲解
2019/02/25 Python
使用matplotlib中scatter方法画散点图
2019/03/19 Python
Python装饰器原理与基本用法分析
2020/01/07 Python
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
通用求职信范文模板分享
2013/12/27 职场文书
甜品店的创业计划书范文
2014/01/02 职场文书
公司合作意向书
2014/04/01 职场文书
三方协议书
2015/01/27 职场文书
详细介绍python类及类的用法
2021/05/31 Python
Python深度学习之实现卷积神经网络
2021/06/05 Python