博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬取国家数据居民消费价格分类指数中2019年12个月36大中城市居民消费和商品零售价格指数!
阅读量:3962 次
发布时间:2019-05-24

本文共 2711 字,大约阅读时间需要 9 分钟。

**

Python爬取国家数据居民消费价格分类指数中2019年12个月36大中城市居民消费和商品零售价格指数

**

目标网站:http://data.stats.gov.cn/index.htm
在这里插入图片描述
http://data.stats.gov.cn/tablequery.htm?code=AA0108
在这里插入图片描述
分析浏览器的数据来源知道数据从脚本传递过来的,所以知道数据存放的浏览器地址。
http://data.stats.gov.cn/tablequery.htm?m=QueryData&code=AA0106&wds=[{
“wdcode”: “sj”, “valuecode”: “201901” }]
观察可知道valuecode为月份,只需改变月数就可以爬取2019年整年的36大中城市居民消费和商品零售价格指数数据。
我的这个demo只是爬取2019年12个月的,还可改进同时爬取多个年份的所有数据。

#encoding=utf-8#@Project filename:PythonDemo  Crawl-Popluation#@IDE   :PyCharm#@Author :ganxiang#@Date   :2020/02/05 17:09import randomimport csvimport  requestsimport osimport jsonhead = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"]headers={
'User-Agent':random.choice(head)}def mkdir ():#当前目录下创建存储文件夹 root = os.getcwd() print(root) ss = "36CityConsumption" floder = os.path.exists("36CityConsumption") if not floder: os.mkdir("36CityConsumption") print('创建%s成功!' % ss) else: print('创建%s失败!' % ss)def request_url():#请求网页并存储数据 d = '[{"wdcode":"sj","valuecode":"201912"}]' #valuecode为月季度,可修改1~12月 url_dd = [] for j in range(1,13): if j<10: dd = [{
"wdcode": "sj", "valuecode": "20190" + str(j) }] dd=json.dumps(dd)#必须将列表中的josn文件转换为字符串,在这里思考了许久,一直找不到get请求的错误,😊happy! else: dd = [{
"wdcode": "sj", "valuecode": "2019" + str(j) }] dd=json.dumps(dd) url_dd.append(dd) # print(url_dd) #思考通过改变valuecode的键值爬取12月份的数据,并存储为一个文件夹下的12个文件 n=1 for q in url_dd: print(q) url = 'http://data.stats.gov.cn/tablequery.htm?m=QueryData&code=AA0106&wds={}'.format(q) print(url) res = requests.get(url,headers=headers).json() print(res) print(res['exceltable']) i = 0#计数列表开始存储的元素 l=[]#存储所有的爬取的字段 with open('./36CityConsumption/%s月36CityConsumption.csv'%n,'w',newline='',encoding='gb18030') as f: header =['地区','居民消费价格指数当月(上年同月=100)','居民消费价格指数累计(上年同期=100)', '商品零售价格指数当月(上年同月=100)','商品零售价格指数累计(上年同期=100)'] w = csv.writer(f) w.writerow(header) for data in res['exceltable']: if i>6: l.append(data['data']) i+=1 print(i)#通过i=192的大小来确定200 for a in range(0,200,5):#每次取出五个进行按行写入CSV文件 # print(a) w.writerow(l[a:a+5]) n+=1 print(n)if __name__ == '__main__': mkdir() request_url()

运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结:一定要细心观察,不然小错误也要思考一会儿的。

转载地址:http://xhqzi.baihongyu.com/

你可能感兴趣的文章