使用 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.pyimport urllib.requestimport jsonpathimport 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()