menu
more_vert
爬虫——json模块与jsonpath模块

作者:dayu

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

示例:

以拉勾网城市JSON文件:http://www.lagou.com/lbs/getAllCitySearchLabels.json为例,获取所有的城市名称。

#!/usr/bin/python3
# -*- conding:utf-8 -*-
__author__ = ‘mayi‘

import urllib.request
import json
import jsonpath

# 拉勾网城市JSON文件
url = ‘http://www.lagou.com/lbs/getAllCitySearchLabels.json‘
# User-Agent头
header = {‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36‘}

# url 连同 headers,一起构造Request请求,这个请求将附带 chrome 浏览器的User-Agent
request = urllib.request.Request(url, headers = header)

# 向服务器发送这个请求
response = urllib.request.urlopen(request)

# 获取页面内容:bytes
html = response.read()

# 转码:bytes转str
html = html.decode("utf-8")

# 把json格式字符串转换成python对象
obj = json.loads(html)

# 从根节点开始,匹配name节点
city_list = jsonpath.jsonpath(obj, ‘$..name‘)

# 打印获取的name节点
print(city_list)
# 打印其类型
print(type(city_list))

# 写入本地磁盘文件
with open("city.json", "w", encoding = "utf-8") as f:
    content = json.dumps(city_list, ensure_ascii = False)
    f.write(content)

爬虫——json模块与jsonpath模块

原文地址:http://www.cnblogs.com/mayi0312/p/7225532.html