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 相关文章推荐
pyv8学习python和javascript变量进行交互
Dec 04 Python
python处理cookie详解
Feb 07 Python
Python中文编码那些事
Jun 25 Python
人机交互程序 python实现人机对话
Nov 14 Python
python读写LMDB文件的方法
Jul 02 Python
python实现扫描局域网指定网段ip的方法
Apr 16 Python
python Django中models进行模糊查询的示例
Jul 18 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
解决pycharm 安装numpy失败的问题
Dec 05 Python
python对接ihuyi实现短信验证码发送
May 10 Python
TensorFlow Autodiff自动微分详解
Jul 06 Python
Python OpenCV 图像平移的实现示例
Jun 04 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
PHP5 面向对象程序设计
2008/02/13 PHP
php session 预定义数组
2009/03/16 PHP
php foreach 参数强制类型转换的问题
2010/12/10 PHP
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
2016/05/30 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
DEFER怎么用?
2006/07/01 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
js限制input标签中只能输入中文
2015/06/26 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
JS实现的仿淘宝交易倒计时效果
2015/11/27 Javascript
Bootstrap Chart组件使用教程
2016/04/28 Javascript
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
python实现根据主机名字获得所有ip地址的方法
2015/06/28 Python
Python获取文件所在目录和文件名的方法
2017/01/12 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
Python类的继承用法示例
2019/01/31 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
深入理解Python 多线程
2020/06/16 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
环境工程大学生个人的自我评价
2013/10/08 职场文书
出国留学计划书
2014/04/27 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
个人剖析材料范文
2014/09/30 职场文书
公司借条范本
2015/05/25 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
MySQL连接控制插件介绍
2021/09/25 MySQL