在爬取网页过程中,经常会遇到JSON数据,本节将记录如何将JSON数据进行提取.
一、定位JSON数据
#北京http://www.weather.com.cn/weather1d/101010100.shtml#search#上海http://www.weather.com.cn/weather1d/101020100.shtml#search
如何找到城市对应的代码,如下图示:
二、获取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