返回顶部
首页 > 资讯 > 后端开发 > Python >Python爬虫(十六)_JSON模块与JsonPath
  • 958
分享到

Python爬虫(十六)_JSON模块与JsonPath

python爬虫json正则表达式开发语言 2023-08-30 11:08:33 958人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

数据提取之JSON与jsonPATH JSON(javascript Object Notation)是一种轻量级的数据交换格式,它是的人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后

在这里插入图片描述

数据提取之JSONjsonPATH

JSON(javascript Object Notation)是一种轻量级的数据交换格式,它是的人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。

JSON和XML的比较可谓不相上下。

python2.7中自带了JSON模块,直接import json就可以使用了。 官方博客:http://docs.python.org/library/json.html

Json在线解析网站:http://www.json.cn/#

JSON

json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数据两种结构,通过这两种结构可以表示各种复杂的结构。

  1. 对象:对象在js中表示为{}括起来的内容,数据结构为{key:value,key:value,…}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为对象.key获取属性值,这个属性值的类型可以是数字、字符串、数组、对象这几种。
  2. 数组:数组在js中是中括号[]括起来的内容,数据结构为[“Python”, “javascript”, “c++”,…],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象几种。

import json

json模块提供了四个功能:dumpsdumploadsload,用于字符串和python数据类型键进行转换。

1、json.loads()

把json格式字符串解码转换成Python对象从json到Python的类型转化对照如下:

从json到python的转化关系

从json到python的转化关系

#json_loads.pyimport jsonstrList = '[1, 2, 3, 4]'strDict = '{"city":"北京", "name":"大猫"}'json.loads(strList)for str in strList:    print(str)#[1, 2, 3, 4]json.loads(strDict)  #json数据自动按Unicode存储#{u'city': u'\u5317\u4eac', u'name': u'\u5927\u732b'}

2、json.dumps()

实现python类型转化为json字符串,返回一个str对象。把一个Python对象编码转换成Json字符串,从python原始类型向json类型转化对照表如下:

python向json转化

python向json转化

#json_dumps.py#-*- coding:utf-8 -*-import jsonimport chardetlistStr = [1, 2, 3, 4]tupleStr = (1, 2, 3, 4)dictStr  = {"city":"北京", "name":"大猫"}print(type(json.dumps(listStr)))# '[1, 2, 3, 4]'print(type(json.dumps(tupleStr)))# '[1, 2, 3, 4]'#注意,json.dumps()序列化时默认使用ascii编码#添加参数 ensure_ascii = False,禁用ascii编码,按utf-8编码#chardet.detect()返回字典,其中confidence是检测精确度。print(json.dumps(dictStr))#'{"city":"\\u5317\\u4eac", "name":"\\u5927\\u5218"}'print(chardet.detect(json.dumps(dictStr)))print(json.dumps(dictStr, ensure_ascii=False))print(chardet.detect(json.dumps(dictStr, ensure_ascii=False)))

chardet是一个非常优秀的编码识别模块,可通过pip安装

3. json.dump()

将Python内置类型序列化为json对象后写入文件

#json_dump.pyimport jsonlistStr = [{"city":"北京"}, {"name":"大刘"}]json.dump(listStr, open("listStr.json", "w"), ensure_ascii=False)dictStr = {"city":"北京", "name":"大刘"}json.dump(dictStr.open("dictStr.json", "w"), ensure_ascii=False)

4.json.load()

读取文件中json形式的字符串元素转化成python类型

#-*- coding:utf-8 -*-import jsonstrList = json.load(open("listStr.json"))print strList# [{u'city': u'\u5317\u4eac'}, {u'name': u'\u5927\u5218'}]strDict = json.load(open("dictStr.json"))print strDict# {u'city': u'\u5317\u4eac', u'name': u'\u5927\u5218'}

JsonPath

JsonPath是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种原因实现保本:JavaScript/Python/PHP和Java

JsonPath对于JSON来说,相当于XPATH对于XML

下载地址:https://pypi.python.org/pypi/jsonpath 安装方法:点击Download URL链接下载jsonpath,解压之后执行python setup.py install 官方文档:http://goessner.net/articles/JsonPath

JsonPath与XPath语法对比:

Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法。

XpathJSONPath描述
/$跟节点
.@现行节点
/. or []取子节点
n/a就是不管位置,选择所有符合条件的条件
**匹配所有元素节点
[][]迭代器标示(可以在里面做简单的迭代操作,如数组下标,根据内容选值等)
|[,]支持迭代器中做多选
[]?()支持过滤操作
n/a()支持表达式计算
()n/a分组,JsonPath不支持

实例:

我们以拉勾网城市JSON文件Http://www.laGou.com/lbs/getAllCitySearchLabels.json为例,获取所有城市。

#-*- coding:utf-8 -*-import urllib2import jsonimport jsonpathimport chardeturl = "http://www.lagou.com/lbs/getAllCitySearchLabels.json"request = urllib2.Request(url)response  = urllib2.urlopen(request)html = response.read()#把json格式字符串转换成python对象jsonobj = json.loads(html)#从根节点开始,匹配name节点citylist = jsonpath.jsonpath(jsonobj, '$..name')print citylistprint(type(citylist))fp = open('city.json', 'w')content = json.dumps(citylist, ensure_ascii=False)print contentfp.write(content.encode('utf-8'))fp.close()

注意事项:

json.loads()是把Json格式字符串解码转换成Python对象,如果在json.loads的时候出错,要注意被解码的Json字符的编码。

如果传入的字符串的编码不是UTF-8的话,需要制定字符编码的参数:encoding

dataDict = json.loads(jsonStrGBK);
  • dataJsonStr是JSON字符串,假设其编码本身是非UTF-8的话而是GBK的,那么上述代码会导致出错,改为对应的。
dataDict = json.loads(jsonStrGBK, encoding="GBK")
  • 如果dataJsonStr通过encoding指定了合适的编码,但是其中又包含了其它编码的字符,则需要先去将dataJsonStr转换为Unicode,然后再指定编码格式调用json.loads()
dataJsonStrUni = data.JsonStr.decode("GB2312")dataDict = json.loads(dataJsontrUni, encoding="GB2312")

字符串编码转换

这是程序员最苦逼的地方,什么乱码之类的几乎都是由汉字引起的。 其实编码问题很好搞定,只要记住一点:

任何平台的任何编码,都能和Unicode互相转换。

UTF-8与GBK互相转换,那就先把UTF-8转换成Unicode,再从Unicode转换成GBK,反之同理。

# 这是一个 UTF-8 编码的字符串utf8Str = "你好地球"# 1.UTF-8 编码的字符串 转换成 Unicode 编码unicodeStr = utf8Str.decode("UTF-8")# 2. 再将 Unicode 编码格式字符串 转换成 GBK 编码gbkData = unicodeStr.encode("GBK")# 1. 再将 GBK 编码格式字符串 转化成 UnicodeunicodeStr = gbkData.decode("gbk")# 2. 再将 Unicode 编码格式字符串转换成 UTF-8utf8Str = unicodeStr.encode("UTF-8")

decode的作用是将其它编码的字符串转换成Unicode编码 encode的作用是将Unicode编码转换成其他编码的字符串 一句话:**UTF-8**是对Unicode字符集记性编码的一种编码格式

更多Python的学习资料可以扫描下方二维码无偿领取!!!

1)Python所有方向的学习路线(新版)

总结python爬虫数据分析等各个方向应该学习的技术栈。

在这里插入图片描述

比如说爬虫这一块,很多人以为学了xpath和PyQuery等几个解析库之后就精通的python爬虫,其实路还有很长,比如说移动端爬虫和JS逆向等等。

img

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然达不到大佬的程度,但是精通python是没有问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

来源地址:https://blog.csdn.net/javasdn/article/details/132567218

--结束END--

本文标题: Python爬虫(十六)_JSON模块与JsonPath

本文链接: https://www.lsjlt.com/news/382679.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python爬虫(十六)_JSON模块与JsonPath
    数据提取之JSON与JsonPATH JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它是的人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后...
    99+
    2023-08-30
    python 爬虫 json 正则表达式 开发语言
  • python爬虫之selenium模块
    目录一、什么是Selenium二、selenium安装1、PhantomJS: 无可视化界面的浏览器(无头浏览器)2、下载浏览器驱动三、selenium基本使用1、声明浏览器对象He...
    99+
    2024-04-02
  • python爬虫常用模块
    python标准库之urllib模块涉及到网络这块,必不可少的模式就是urllib.request了,顾名思义这个模块主要负责打开URL和HTTP协议之类的urllib最简单的应用就是urllib.request.urlopen(url, ...
    99+
    2023-01-30
    爬虫 模块 常用
  • Python 爬虫 urllib模块:p
    本程序以爬取 'http://httpbin.org/post' 为例格式:  导入urllib.request  导入urllib.parse  数据编码处理,再设为utf-8编码:  bytes(urllib.parse.urlenco...
    99+
    2023-01-31
    爬虫 模块 Python
  • python爬虫selenium模块详解
    目录selenium模块 selenium基本概念基本使用基于浏览器自动化的操作selenium处理iframe:selenium模拟登陆QQ空间无头浏览器和规避检测selenium...
    99+
    2024-04-02
  • Python入门教程(二十六)Python的模块
    目录什么是模块?创建模块使用模块模块中的变量为模块命名重命名模块内建模块使用 dir() 函数从模块导入什么是模块? 请思考与代码库类似的模块。 模块是包含一组函数的文件,希望在应用...
    99+
    2023-05-17
    Python 入门 Python 模块
  • Python爬虫基础之requestes模块
    一、爬虫的流程 开始学习爬虫,我们必须了解爬虫的流程框架。在我看来爬虫的流程大概就是三步,即不论我们爬取的是什么数据,总是可以把爬虫的流程归纳总结为这三步: 指定 url,可以简单的理解为指定要爬取的网址 发送请求。...
    99+
    2022-06-02
    Python requestes模块 python爬虫
  • Python爬虫使用lxml模块爬取豆瓣
    上次使用了BeautifulSoup库爬取电影排行榜,爬取相对来说有点麻烦,爬取的速度也较慢。本次使用的lxml库,我个人是最喜欢的,爬取的语法很简单,爬取速度也快。 本次爬取的豆瓣书籍排行榜的首页地址是: https://www.dou...
    99+
    2023-01-31
    爬虫 豆瓣 模块
  • python爬虫之request模块深入讲解
    目录一、概述二、安装和基本步骤使用三、http知识复习四、request请求模块的方法使用五,params和payload参数使用说明总结一、概述 在后期渗透测试中,经常会遇到需要向...
    99+
    2024-04-02
  • python爬虫之selenium模块怎么使用
    这篇文章主要介绍了python爬虫之selenium模块怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python爬虫之selenium模块怎么使用文章都会有所收获,下面我们一起来看看吧。一、什么是Se...
    99+
    2023-06-30
  • python爬虫urllib中的异常模块处理
    目录urllib中的异常处理url的组成部分URLErrorHTTPError简介Urllib.error 模块异常处理urllib中的异常处理 在我们写爬虫程序时,若出现url中的...
    99+
    2024-04-02
  • python爬虫xpath模块简介示例代码
    目录一、前言二、简介三、安装四、使用五、案例一、前言 前两篇博客讲解了爬虫解析网页数据的两种常用方法,re正则表达解析和beautifulsoup标签解析,所以今天的博客将围绕另外一...
    99+
    2023-02-14
    python xpath模块 python爬虫 xpath
  • Python中urllib爬虫、request模块和parse模块的示例分析
    小编给大家分享一下Python中urllib爬虫、request模块和parse模块的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!urlliburlli...
    99+
    2023-06-14
  • Python中urllib+urllib2+cookielib模块编写爬虫实战
    超文本传输协议http构成了万维网的基础,它利用URI(统一资源标识符)来识别Internet上的数据,而指定文档地址的URI被称为URL(既统一资源定位符),常见的URL指向文件、目录或者执行复杂任务的对...
    99+
    2022-06-04
    爬虫 实战 模块
  • Python用requests模块实现动态网页爬虫
    目录前言开发工具环境搭建总结前言 Python爬虫实战,requests模块,Python实现动态网页爬虫 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块:...
    99+
    2024-04-02
  • python爬虫之利用selenium模块自动登录CSDN
    目录一、页面分析二、引入selenium模块及驱动2.1 并将安装好的Chromedriver.exe引入到代码中2.2 浏览器驱动引入三、爬虫模拟登录3.1 设置网址链接3.2 切...
    99+
    2024-04-02
  • python爬虫之请求模块urllib的基本使用
    目录前言urllib的子模块HttpResponse常用方法与属性获取信息urlli.parse的使用(一般用于处理带中文的url)✅爬取baidu官网HTML源代码✅添加请求头信息...
    99+
    2024-04-02
  • python爬虫urllib中的异常模块如何处理
    这篇文章主要介绍“python爬虫urllib中的异常模块如何处理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python爬虫urllib中的异常模块如何处理”文章能帮助大家解决问题。urllib...
    99+
    2023-06-30
  • Python使用Mechanize模块编写爬虫的要点解析
    mechanize是对urllib2的部分功能的替换,能够更好的模拟浏览器行为,在web访问控制方面做得更全面。结合beautifulsoup和re模块,可以有效的解析web页面,我比较喜欢这种方法。 ...
    99+
    2022-06-04
    爬虫 要点 模块
  • python爬虫urllib库中parse模块urlparse的使用方法
    这篇文章主要介绍了python爬虫urllib库中parse模块urlparse的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在python爬虫urllib库中,u...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作