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 13 Python
Python做文本按行去重的实现方法
Oct 19 Python
python 全文检索引擎详解
Apr 25 Python
python3.5 tkinter实现页面跳转
Jan 30 Python
浅谈DataFrame和SparkSql取值误区
Jun 09 Python
详解Python 装饰器执行顺序迷思
Aug 08 Python
python实发邮件实例详解
Nov 11 Python
Python闭包及装饰器运行原理解析
Jun 17 Python
Python 合并拼接字符串的方法
Jul 28 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
Sep 26 Python
python查询MySQL将数据写入Excel
Oct 29 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 20 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
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
PHP内存使用情况如何获取
2015/10/10 PHP
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
javascript中数组和字符串的方法对比
2016/07/20 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
利用Javascript实现一套自定义事件机制
2017/12/14 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
Python常见字符串操作函数小结【split()、join()、strip()】
2018/02/02 Python
Python字符串对象实现原理详解
2019/07/01 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
python入门之基础语法学习笔记
2020/02/08 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
python中二分查找法的实现方法
2020/12/06 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
金融专业个人求职信范文
2013/11/28 职场文书
公司活动邀请函
2014/01/24 职场文书
代理商会议邀请函
2014/01/27 职场文书
小学体育教学反思
2014/01/31 职场文书
团日活动策划书
2014/02/01 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
四风存在的原因分析
2014/02/11 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
python实现简单区块链结构
2021/04/25 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技