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

**

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:09
import random
import csv
import  requests
import os
import json
head = [
"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()


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

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值