國家統計局數據爬取——機器學習

這個代碼是一個用于爬取國家統計局網站數據的Python腳本。下面我將詳細解釋代碼的各個部分及其設計思路。

代碼結構概述

import requests  # 發送HTTP請求
from bs4 import BeautifulSoup  # 解析HTML
import 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 = 0
for 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')

  • 作用:查找HTML文檔中的所有<table>元素

  • 設計思路:國家統計局的數據通常以表格形式展示,所以首先找到所有表格

2. cells = row.find_all(['td', 'th'])

  • 作用:在每一行中查找所有的<td>(表格數據單元格)和<th>(表格標題單元格)元素

  • 為什么同時查找td和th

    • <td>是普通數據單元格

    • <th>是表頭單元格,通常包含列標題

    • 兩者都需要提取,因為表頭也包含重要信息

    • 有些表格可能混合使用td和th,或者使用th作為行標題

3. if len(cells) > max_cols: max_cols = len(cells)

  • 作用:確定表格的最大列數

  • 為什么需要這個

    • HTML表格可能有不規則結構(某些行可能有合并的單元格)

    • 為了創建規整的DataFrame,需要知道表格的最大寬度

    • 確保所有行都有相同的列數,不足的用空值填充

設計思路詳解

1. 處理不規則表格

HTML表格可能有不規則結構,例如:

<table><tr><th>標題1</th><th>標題2</th><th>標題3</th></tr><tr><td>數據1</td><td colspan="2">合并單元格</td> <!-- 這一行只有2個單元格,但占據2列 --></tr>
</table>

在這種情況下,代碼會:

  1. 第一行:找到3個單元格(th),設置max_cols=3

  2. 第二行:找到2個單元格(td),但max_cols保持3

  3. 后續處理時,第二行會被填充到3列(添加一個空單元格)

2. 確保數據規整性

通過確定最大列數,可以:

  • 創建統一結構的DataFrame

  • 避免因列數不一致導致的數據錯位

  • 保持數據的完整性,便于后續分析

3. 完整的工作流程

這段代碼是完整表格處理流程的一部分:

  1. 找到所有表格

  2. 對每個表格,確定最大列數

  3. 逐行處理,確保每行有相同的列數

  4. 創建規整的二維數組

  5. 轉換為DataFrame進行后續處理

    <

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94822.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94822.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94822.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

內存管理(智能指針,內存對齊,野指針,懸空指針)

&#x1f4cc; 1. 野指針 (Wild Pointer)什么是野指針&#xff1f;野指針指的是未初始化的指針變量。它指向的內存地址是隨機的、未知的。產生原因cppint* ptr; // 野指針&#xff01;未初始化&#xff0c;指向隨機地址 *ptr 10; // 危險&#xff01;可能破壞系統內存char* st…

Spring代理的特點

一.Spring代理的特點1.依賴注入和初始化影響的是原始的對象。2.代理和目標是兩個對象&#xff0c;二者成員變量不共用數據。二.測試首先準備以下幾個類。Bean1package com.example.springdemo.demos.a13;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.…

嵌入式學習日記(35)TCP并發服務器構建

單循環服務器&#xff1a;服務端同一時刻只能處理一個客戶端的任務并發服務器&#xff1a;服務端同一時刻可以處理多個客戶端的任務TCP并發服務器構建&#xff1a;TCP&#xff1a; 1. 建立連接&#xff0c;一對一TCP服務端并發模型&#xff1a;1. 多進程進程資源開銷大&#x…

【Flask】測試平臺開發實戰-第二篇

概述&#xff1a;在上一篇我們已經將后端初始化服務后前端的vue框架初始化已經搭建完整&#xff0c;并且可以運行看到界面&#xff0c;服務正常&#xff0c;當然我們看到的前端數據都是mock下的假數據&#xff0c;并不是真實的&#xff0c;這篇我們來開發實現第一個功能&#x…

聊一聊 .NET 的 AssemblyLoadContext 可插拔程序集

一&#xff1a;背景 1. 講故事 最近在分析一個崩潰dump時&#xff0c;發現禍首和AssemblyLoadContext有關&#xff0c;說實話這東西我也比較陌生&#xff0c;后來查了下大模型&#xff0c;它主要奔著替代 .NetFrameWork 時代的 AppDomain 的&#xff0c;都是用來做晚期加卸載&a…

Java中使用Spring Boot+Ollama實現本地AI的MCP接入

目錄結構完善spring bootpom.xml添加依賴application.ymlMCP 工具配置 mcp-servers.json配置類編寫API在我的上一篇文章搭建好本地的聊天機器人后&#xff0c;準備接入MCP進一步增強AI的能力&#xff0c;以實現類似手機AI的功能 參考的是第二篇文章鏈接其內容比較精煉&#x…

C#正則表達式與用法

&#x1f31f; C# 常用正則表達式與用法C# 使用正則需要引用命名空間&#xff1a;using System.Text.RegularExpressions; 常用方法&#xff1a;Regex.IsMatch(input, pattern) → 返回 bool&#xff0c;用于驗證Regex.Match(input, pattern) → 返回 Match 對象&#xff0c;可…

從0開始學習Java+AI知識點總結-27.web實戰(Maven高級)

一、分模塊設計與開發&#xff1a;讓項目結構更清晰1.1 為什么需要分模塊&#xff1f;單模塊開發的痛點在小型項目中&#xff0c;單模塊&#xff08;所有代碼放在一個工程&#xff09;或許能滿足需求&#xff0c;但項目規模擴大后會出現兩大核心問題&#xff1a;維護成本高&…

Ferris Wheel (貪心 | 雙指針)

題目&#xff1a;思路&#xff1a;本題注意題目的條件即可&#xff0c;題意說一個摩天輪可以坐一個人或者兩個人&#xff0c;那么顯然我們就可以貪心一下具體的&#xff0c;我們可以讓最小的去匹配最大的&#xff0c;如果此時大于 x&#xff0c;那么顯然我們根本無法使得 最大的…

課程視頻怎么加密?在線教育機構常用的6個課程加密方法

知識付費時代&#xff0c;課程視頻是教育機構的核心資產。但是不難發現&#xff0c;課程視頻的安全卻得不到保障。各大購物平臺搜索課程名稱&#xff0c;便出現了許多盜版課程。如何有效防止課程被翻錄和二次傳播&#xff0c;成為急需解決的關鍵問題。今天這期分享點干貨&#…

SOME/IP-SD中”服務器服務組播端點”、“客戶端服務組播端點”與“IPv4組播選項的區分

<摘要> AUTOSIP-SD協議中組播端點&#xff08;Multicast Endpoint&#xff09;在不同上下文中的角色與表述差異。準確理解“服務器服務組播端點”、“客戶端服務組播端點”與“IPv4組播選項”中配置的端點之間的關系&#xff0c;是正確實現組播事件分發機制的關鍵。這涉及…

計算機是如何運行的

目錄 一&#xff0c;計算機是如何組成的 1.1&#xff0c;CPU中央處理單元 1.1.1&#xff0c;CPU的構成和屬性 1.1.2&#xff0c;如何判斷cpu的好壞 1.1.3&#xff0c;指令 1.1.4&#xff0c;CPU的緩存 1.2&#xff0c;操作系統 1.2.1&#xff0c;進程 1.2.2&#xff0…

JavaScript性能優化:實戰技巧與高效策略

JavaScript性能優化實戰技術文章大綱性能優化的重要性解釋為什么性能優化對用戶體驗和業務指標至關重要列舉常見性能問題的影響&#xff08;如跳出率、轉化率下降&#xff09;代碼層面的優化減少全局變量使用&#xff0c;避免內存泄漏使用事件委托減少事件監聽器的數量避免頻繁…

解決.env.production 寫死 IP 的問題:Vue + config.json 運行時加載方案

背景&#xff1a;前端常用 .env.production 在構建時寫死 API 地址 場景&#xff1a;運維部署時經常不知道目標主機 IP/域名 問題&#xff1a;每次 IP 變動都要重新編譯 → 增加運維成本 引出需求&#xff1a;只修改 IP 就能完成部署&#xff0c;不需要重新打包 目錄一、解決方…

如何從三星手機轉移到另一部三星手機

三星Galaxy S系列因其出色的設計、令人驚嘆的顯示屏、驚艷的攝像頭、更好的揚聲器以及創新的指紋傳感器而受到大多數用戶的歡迎&#xff0c;獲得了良好的聲譽。讓用戶感到滿意的是&#xff0c;三星Galaxy S10擁有更美觀的設計、令人驚嘆的顯示屏、令人驚嘆的攝像頭、更好的揚聲…

聚焦建筑能源革新!安科瑞 “光儲直柔” 方案護航碳中和目標實現

1、背景在 “雙碳” 目標引領下&#xff0c;能源結構轉型與建筑能效提升成為重要課題。清華大學江億院士提出的 “光儲直柔” 新型配電系統&#xff0c;為建筑領域綠色發展提供了創新方向。光儲直柔得到了業界廣泛認同和積極響應&#xff0c;國家、各部委、地區陸續出臺相關政策…

Shell 中 ()、(())、[]、{} 的用法詳解

文章目錄Shell 中 ()、(())、[]、{} 的用法詳解一、先明確&#xff1a;四類符號的核心功能定位二、逐個拆解&#xff1a;用法、示例與避坑點1. ()&#xff1a;子 Shell 執行&#xff0c;隔離環境核心用法1&#xff1a;子 Shell 執行命令&#xff0c;隔離變量核心用法2&#xff…

開發避坑指南(41):Vue3 提示框proxy.$modal.msgSuccess()提示文本換行解決方案

需求 由于接口返回的提示信息過長&#xff0c;接口已經在返回提示中加入換行標簽了&#xff0c;但是使用proxy.modal.msgSuccess(res.msg)提示沒有換行&#xff0c;那么Vue3中proxy.modal.msgSuccess(res.msg)提示沒有換行&#xff0c;那么Vue3 中 proxy.modal.msgSuccess(res.…

[Sync_ai_vid] 唇形同步推理流程 | Whisper架構

鏈接&#xff1a;https://github.com/bytedance/LatentSync/blob/main/docs/syncnet_arch.md docs&#xff1a;LatentSync LatentSync是一個端到端唇語同步項目&#xff0c;能夠生成語音與唇形完美匹配的逼真視頻。 該項目通過使用*音頻條件化3D U-Net*&#xff08;一種生成式…

uniapp中 ios端 scroll-view 組件內部子元素z-index失效問題

發現子組件中的彈窗在ios手機上會被限制在scroll-view里面&#xff0c;安卓手機上不受限制&#xff0c;網上找了好久原因 scroll-view組件內部設置了 -webkit-overflow-scrolling: touch 樣式&#xff0c;導致z-index失效&#xff08;safari 3D變換會忽略z-index的層級問題&…