发布于 3年前

python爬虫 如何解析json文件 json文件的解析提取和jsonpath的应用

json文件的地址url="http://www.lagou.com/lbs/getAllCitySearchLabels.json"

用python来解析 并提取出其中的城市名

代码如下:

#coding:utf8

import urllib2

#json解析库,对应到lxml

import json

#json的解析语法,对应到xpath

import jsonpath

url="http://www.lagou.com/lbs/getAllCitySearchLabels.json"

header={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0"}

request=urllib2.Request(url,headers=header)

response=urllib2.urlopen(request)

#取出json文件里的内容,返回的格式是字符串

html=response.read()

#把json形式的字符串转换成python形式的Unicode字符串

unicodestr=json.loads(html)

#python形式的列表

city_list=jsonpath.jsonpath(unicodestr,"$..name")

#打印每个城市

for i in city_list:

    print i

#dumps()默认中文伟ascii编码格式,ensure_ascii默认为Ture

#禁用ascii编码格式,返回Unicode字符串

array=json.dumps(city_list,ensure_ascii=False)

#把结果写入到lagouCity.json文件中

with open("lagouCity.json","w") as f:

    f.write(array.encode("utf-8"))

另外再写个简单的流程案例:

import requests

import json

import jsonpath

url='http://baijiajiekuan.oss-cn-shanghai.aliyuncs.com/mongo/risk/original/data/20180206/04b94dac3ed84922b6d53c85514e700c.txt'

response=requests.get(url)

# 输出编码格式

# print(response.apparent_encoding)

# 解码

response.encoding='utf8'

# 读取reponse

html=response.text

# print(html)

# 把json格式字符串转换成python对象

html=json.loads(html)

# print(html)

# 获取score节点下的数据

qq=jsonpath.jsonpath(html,'$..score')

print(qq)

JsonPath与XPath语法对比:

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

XPath JSONPath 描述

/ $ 根节点

. @ 现行节点

/ .or[] 取子节点

.. n/a 取父节点,Jsonpath未支持

// .. 就是不管位置,选择所有符合条件的条件

* * 匹配所有元素节点

@ n/a 根据属性访问,Json不支持,因为Json是个Key-value递归结构,不需要。

[] [] 迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等)

| [,] 支持迭代器中做多选。

[] ?() 支持过滤操作.

n/a () 支持表达式计算

() n/a 分组,JsonPath不支持

©2020 edoou.com   京ICP备16001874号-3