使用 JSONPath 将所有的城市名称提取出来,并保存在一个文件中。
{
"state": 1,
"message": "success",
"content": {
"rows": [],
"data": {
"allCitySearchLabels": {
"A": [
{
"id": 601,
"name": "鞍山",
"parentId": 535,
"code": "081600000",
"isSelected": false
},
{
"id": 105795,
"name": "中国澳门特别行政区",
"parentId": 562,
"code": "330100000",
"isSelected": false
}
]
}
}
}
}
① 访问 URL
创建一个文件,取名为 jsonLagou.py。然后,引用 urllib.request 模块,访问拉勾网的 URL,获取网页内容。
# jsonLagou.py
import urllib.request
import jsonpath
import json
url = "http://www.lagou.com/lbs/getAllCitySearchLabels.json"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
request = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(request)
html = response.read()
print(html)
此时获得的 html 内容就是一个 JSON 格式的字符串。
② 读取城市名称列表
将字符串格式的 JSON 转换为 Python 对象,并使用 JSONPath 获取所有 name 节点的值,形成列表。
# 把 JSON 格式字符串转换成 Python 对象
jsonobj = json.loads(html)
# 从根节点开始,匹配 name 节点
city_list = jsonpath.jsonpath(jsonobj, "$..name")
print(city_list)
此时 city_list 变量中存储的就是所有的城市列表。
③ 将城市列表保存到本地
使用 json.dumps() 方法将列表转化为 JSON 格式的字符串,再将字符串写入本地文件。
# 打开或创建一个名为 city.json 的文件
file = open("city.json", w)
# 将列表序列化为 JSON 格式的字符串
content = json.dumps(city_list, ensure_ascii=False)
print(content)
# 将 JSON 格式的字符串写入本地文件
file.write(content)
file.close()