js处理json数据(js判断数据类型讲解)

在爬取网页过程中,经常会遇到JSON数据,本节将记录如何将JSON数据进行提取.

一、定位JSON数据

#北京http://www.weather.com.cn/weather1d/101010100.shtml#search#上海http://www.weather.com.cn/weather1d/101020100.shtml#search

如何找到城市对应的代码,如下图示:

js处理json数据(js判断数据类型讲解)

二、获取JSON数据

右键city.js在新窗口打开它,发现是乱码,没有关系

https://j.i8tq.com/weather2020/search/city.js

使用python获取响应

import requestsurl = ‘https://j.i8tq.com/weather2020/search/city.js’headers = { ‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36’,}response = requests.get(url=url,headers=headers)city = response.text

控制台输出一下

没有乱码不用管,有乱码加一行

response.encoding = response.apparent_encoding

但是{}号前面的字符串要删掉

city = city.replace(‘var city_data =’,”).strip()

三、解析JSON数据

解析JSON数据需要用到JSON模块,直接导入即可

import json

我们用到是json.loads(),用于将JSON字符串对象解析成为Python字典

city = json.loads(city)

可以使用type()看看city类型,已经从str类型转换为了dict类型

首先我们分析一下字典结构

然后我们就可以操作字典了,使用for循环解析出省(直辖市)

解析下一级字典

#创建一个空字典city_code = {}fork,vincity.items(): for province,city_dict in v.items(): for city_,city_code_dict in city_dict.items(): city_code[city_code_dict[‘NAMECN’]] = city_code_dict[‘AREAID’]

至此就已经获取了所有城市区县对应的代码

然后就可以通过输入想要查询的城市进行爬取了,构造url

测试一下

完整代码

链接:https://pan.baidu.com/s/16TvQnBuHeR88-aHoXlML3w 提取码:sf6a

发表评论

登录后才能评论