简单的爬虫教程-如何爬取国家统计局工业增加值同比增长数据

本文介绍了如何通过分析接口数据,利用时间戳和随机数生成动态参数,编写Python代码爬取国家数据统计网站的数据,以避免被识别为机器人。作者详细展示了获取接口参数、生成URL和解析抓取结果的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一、分析接口数据

1、打开国家数据统计网站,并展开要抓取的数据:

国家数据 (stats.gov.cn)

2、按F12打开开发者工具,在页面左边重新点击【工业增加值增长速度】,让页面重新获取接口,在F12中就看到抓取的接口目标:

3、我们分析一下接口的参数:

https://data.stats.gov.cn/easyquery.htm?m=QueryData&dbcode=hgyd&rowcode=zb&colcode=sj&wds=%5B%5D&dfwds=%5B%7B%22wdcode%22%3A%22zb%22%2C%22valuecode%22%3A%22A0201%22%7D%5D&k1=1696918741748&h=1

我们看到这个接口url,前面的是一些获取目标数据的参数,我们不用管,看看后面的k1=1696918741748,我们分析了一下,发现每次获取,这个参数都会变,再和时间戳对比一下,原来是时间戳后面加上3位数。

二、编写爬取代码


import time
import random
import json
import requests


# 获取当前时间戳(秒级)
timestamp = int(time.time())
# 生成3位随机数(范围在000到999之间)
random_number = random.randint(0, 999)
# 将随机数格式化为3位,不足3位时在前面补0
random_number_str = f"{random_number:03d}"
# 合并时间戳和随机数
timestamp3 = f"{timestamp}{random_number_str}"
url=f'https://data.stats.gov.cn/easyquery.htm?m=QueryData&dbcode=hgyd&rowcode=zb&colcode=sj&wds=%5B%5D&dfwds=%5B%7B%22wdcode%22%3A%22zb%22%2C%22valuecode%22%3A%22A0201%22%7D%5D&k1={timestamp3}&h=1'
print(url)

json_string=myclass.mySpider.catchItem(url)
print(json_string)


data = json.loads(json_string)


# 获取datanodes数据
datanodes = data["returndata"]["datanodes"]

# 初始化一个空列表来存储处理后的数据
formatted_data = []

# 遍历datanodes数据并筛选、转换
for node in datanodes:
    if node["code"].startswith("zb.A020101_sj") and node["data"]["hasdata"]:
        # 从code的后6位获取月份
        month = node["code"][-6:]
        # 获取strdata
        strdata = node["data"]["strdata"]
        # 添加到格式化数据列表
        formatted_data.append((month, strdata))

# 输出格式化后的数据
for item in formatted_data:
    print(f"月份: {item[0]}, strdata: {item[1]}")

 我们把上面的代码放到vscode里执行,如下图所示,可以正常抓取取想要的数据了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值