> 技术文档 > 国家统计局数据爬取——机器学习

国家统计局数据爬取——机器学习

这个代码是一个用于爬取国家统计局网站数据的Python脚本。下面我将详细解释代码的各个部分及其设计思路

代码结构概述

import requests # 发送HTTP请求from bs4 import BeautifulSoup # 解析HTMLimport pandas as pd # 数据处理和存储import time # 时间控制import random # 随机数生成import os # 文件系统操作import re # 正则表达式

函数设计思路

1. 请求头设置

headers = { \'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...\', \'Accept\': \'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp...\', \'referer\': \'https://www.stats.gov.cn/sj/zxfbhjd/202508/t20250822_1960866.html\'}

设计思路

  • 模拟真实浏览器行为,避免被网站反爬机制拦截

  • 设置Referer头,使请求看起来是从合法页面跳转而来

  • 使用常见的User-Agent字符串,增加请求的合法性

2. 随机延迟机制

time.sleep(random.uniform(1, 3))

设计思路

  • 避免过于频繁的请求导致IP被封

  • 使用随机时间间隔,模拟人类操作的不规律性

  • 1-3秒的间隔既不会太慢影响效率,也不会太快触发反爬

3. 请求与响应处理

response = requests.get(url, headers=headers, timeout=30)response.encoding = \'utf-8\' # 设置编码

设计思路

  • 设置30秒超时,避免长时间等待无响应

  • 显式设置编码为UTF-8,确保中文正确显示

  • 检查状态码,确保请求成功


4. 表格解析与处理

tables = soup.find_all(\'table\')# 分析表格结构max_cols = 0for j, row in enumerate(rows): cells = row.find_all([\'td\', \'th\']) if len(cells) > max_cols: max_cols = len(cells)

设计思路

  • 查找页面中的所有表格

  • 分析每个表格的结构,确定最大列数

  • 确保每行数据有相同的列数,避免DataFrame创建时出错

代码解析

1.tables = soup.find_all(\'table\')