这篇文章将为大家详细讲解有关python爬虫中JSON和JSONPath是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

JSON和JSONPath

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

JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。

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

JsonPath与XPath语法对比:

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

利用JSONPath爬取拉勾网上所有的城市

#!/usr/bin/envpython#-*-coding:utf-8-*-importurllib2#json解析库,对应到lxmlimportjson#json的解析语法,对应到xpathimportjsonpathurl="http://www.lagou.com/lbs/getAllCitySearchLabels.json"headers={'User-Agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/60.0.3112.101Safari/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")#foritemincity_list:#printitem#dumps()默认中文为ascii编码格式,ensure_ascii默认为Ture#禁用ascii编码格式,返回的Unicode字符串,方便使用array=json.dumps(city_list,ensure_ascii=False)#json.dumps(city_list)#array=json.dumps(city_list)withopen("lagoucity.json","w")asf:f.write(array.encode("utf-8"))

结果:

糗事百科爬取

利用XPATH的模糊查询

获取每个帖子里的内容

保存到 json 文件内

#!/usr/bin/envpython#-*-coding:utf-8-*-importurllib2importjsonfromlxmlimportetreeurl="http://www.qiushibaike.com/8hr/page/2/"headers={'User-Agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/60.0.3112.101Safari/537.36'}request=urllib2.Request(url,headers=headers)html=urllib2.urlopen(request).read()#响应返回的是字符串,解析为HTMLDOM模式text=etree.HTML(html)text=etree.HTML(html)#返回所有段子的结点位置,contains()模糊查询方法,第一个参数是要匹配的标签,第二个参数是标签名部分内容node_list=text.xpath('//div[contains(@id,"qiushi_tag")]')items={}fornodeinnode_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].textitems={"username":username,"content":content,"zan":zan,"comments":comments}withopen("qiushi.json","a")asf:f.write(json.dumps(items,ensure_ascii=False).encode("utf-8")+"\n")

关于python爬虫中JSON和JSONPath是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。