數據采集技術之python網絡爬蟲(中國天氣網的爬取)

一、爬取中國天氣網所有地區當天的天氣數據(PyCharm):

網址:https://www.weather.com.cn/

下面爬取數據:

因為現在已經到了夜間,所以白天的數據已經不見了,但原理是一樣的。

二、代碼以及詳情解釋:

?具體的代碼的url以及headers是要從檢查里面找的:

?

以及這些元素代碼的尋找:

這個代碼是一個用于從中國天氣網(weather.com.cn)抓取天氣信息的Python腳本。它使用了?requests?庫發送HTTP請求,并使用?BeautifulSoup?庫解析HTML內容。以下是代碼的主要功能和相關知識點的羅列:


代碼功能概述

  1. 遍歷多個地區:代碼通過遍歷一個地區列表(area),構造不同的URL來獲取不同地區的天氣信息。

  2. 發送HTTP請求:使用?requests.get()?發送HTTP請求,獲取網頁的HTML內容。

  3. 解析HTML:使用?BeautifulSoup?解析HTML內容,提取所需的天氣信息。

  4. 提取天氣信息:從HTML中提取城市名稱、上午天氣、上午風力風向、上午最高溫度、晚上天氣、晚上風力風向、晚上最低溫度等信息。

  5. 去重處理:使用集合?processed_cities?來避免重復處理同一個城市的天氣信息。

  6. 打印結果:將提取的天氣信息格式化輸出到控制臺。


涉及的知識點

1. Python基礎
  • 列表與循環

    • 使用列表?area?存儲地區代碼。

    • 使用?for?循環遍歷列表中的每個地區。

  • 字符串格式化

    • 使用?f-string(如?f"https://www.weather.com.cn/textFC/{page}.shtml")動態構造URL。

  • 集合(Set)

    • 使用集合?processed_cities?來存儲已經處理過的城市名稱,確保每個城市只被處理一次。

2. HTTP請求
  • requests?庫

    • 使用?requests.get()?發送HTTP GET請求,獲取網頁內容。

    • 設置請求頭?headers,模擬瀏覽器訪問,避免被網站反爬蟲機制攔截。

    • 使用?res.encoding = 'utf-8'?設置響應內容的編碼為UTF-8,確保中文內容正確顯示。

3. HTML解析
  • BeautifulSoup?庫

    • 使用?BeautifulSoup(res.text, 'lxml')?解析HTML內容,lxml?是解析器。

    • 使用?soup.select()?方法通過CSS選擇器查找HTML元素。

    • 使用?find()?和?find_all()?方法查找特定的HTML標簽和屬性。

4. HTML結構與CSS選擇器
  • HTML表格結構

    • 網頁中的天氣信息以表格形式展示,代碼通過查找?<div class="conMidtab2">?和?<tr><td>?標簽來提取數據。

  • CSS選擇器

    • 使用?div.conMidtab2?選擇所有?class?為?conMidtab2?的?<div>?元素。

    • 使用?tr?選擇表格行,td?選擇表格單元格。

  • HTML屬性

    • 通過?width?屬性(如?width='83')定位特定的表格單元格。

5. 數據提取與處理
  • 提取文本內容

    • 使用?.string?提取HTML標簽內的文本內容(如?tr.find('td', width='83').a.string)。

  • 條件判斷

    • 使用?if?語句檢查是否存在某個HTML元素或屬性,避免因元素不存在而報錯。

  • 數據格式化與輸出

    • 使用?print()?函數將提取的天氣信息格式化輸出。

6. 去重與集合
  • 集合(Set)

    • 使用集合?processed_cities?存儲已經處理過的城市名稱,利用集合的唯一性特性避免重復處理。

7. 異常處理(未顯式實現)
  • 代碼中沒有顯式的異常處理(如?try-except),但在實際應用中,建議添加異常處理機制,以應對網絡請求失敗或HTML解析錯誤等情況。


代碼執行流程

  1. 遍歷地區列表

    • 對每個地區代碼(如?hbdb?等),構造對應的URL。

  2. 發送HTTP請求

    • 使用?requests.get()?獲取網頁內容。

  3. 解析HTML

    • 使用?BeautifulSoup?解析HTML,查找包含天氣信息的表格。

  4. 提取天氣信息

    • 遍歷表格行,提取城市名稱、天氣、風力風向、溫度等信息。

  5. 去重處理

    • 使用集合?processed_cities?避免重復處理同一城市。

  6. 輸出結果

    • 將提取的天氣信息格式化輸出到控制臺。


總結

這段代碼展示了如何使用Python進行網頁抓取和HTML解析,涉及的知識點包括:

  • Python基礎(列表、循環、字符串格式化、集合)

  • HTTP請求(requests?庫)

  • HTML解析(BeautifulSoup?庫)

  • HTML結構與CSS選擇器

  • 數據提取與處理

  • 去重與集合

通過這段代碼,可以學習如何從網頁中提取結構化數據,并將其用于進一步的分析或存儲。

import requests
from bs4 import BeautifulSoup# 定義地區列表
area = ["hb", "db", "hd", "hz", "hn", "xb", "xn", "gat"]for page in area:# 構造 URLurl = f"https://www.weather.com.cn/textFC/{page}.shtml"headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0"}# 發送 HTTP 請求獲取網頁內容res = requests.get(url=url, headers=headers)res.encoding = 'utf-8'  # 設置編碼為 UTF-8# 使用 BeautifulSoup 解析網頁內容soup = BeautifulSoup(res.text, 'lxml')# 用于存儲已經處理過的城市名稱processed_cities = set()# 遍歷所有 class 為 conMidtab2 的 div 元素for div in soup.select('div.conMidtab2'):# 遍歷 div 中的所有 tr 元素(表格行)for tr in div.select('tr'):# 檢查當前行是否包含寬度為 83 的 td 元素,該元素可能包含城市信息if tr.find('td', width='83'):# 檢查寬度為 83 的 td 元素中是否有 a 標簽,a 標簽內通常是城市名if tr.find('td', width='83').a:# 提取城市名city = tr.find('td', width='83').a.string# 如果城市已經處理過,則跳過if city in processed_cities:continue# 否則,將城市添加到已處理集合中processed_cities.add(city)# 打印城市名print(f"城市:{city}")# 提取上午天氣信息morning_weather_td = tr.find('td', width='89')if morning_weather_td:morning_weather = morning_weather_td.stringprint(f"上午天氣:{morning_weather}")# 提取上午風力風向信息morning_wind_td = tr.find('td', width='162')if morning_wind_td:spans = morning_wind_td.find_all('span')if len(spans) >= 2:morning_wind_1 = spans[0].stringmorning_wind_2 = spans[1].stringprint(f"上午風力風向:{morning_wind_1} {morning_wind_2}")# 提取上午最高溫度morning_max_temp_td = tr.find('td', width='92')if morning_max_temp_td:morning_max_temp = morning_max_temp_td.stringprint(f"上午最高溫度:{morning_max_temp}")# 提取晚上天氣信息night_weather_td = tr.find('td', width='98')if night_weather_td:night_weather = night_weather_td.stringprint(f"晚上天氣:{night_weather}")# 提取晚上風力風向信息night_wind_td = tr.find('td', width='177')if night_wind_td:spans = night_wind_td.find_all('span')if len(spans) >= 2:night_wind_1 = spans[0].stringnight_wind_2 = spans[1].stringprint(f"晚上風力風向:{night_wind_1} {night_wind_2}")# 提取晚上最低溫度night_min_temp_td = tr.find('td', width='86')if night_min_temp_td:night_min_temp = night_min_temp_td.stringprint(f"晚上最低溫度:{night_min_temp}")# 打印分隔線,用于區分不同城市的天氣信息print('-----------------')else:# 如果當前行不包含寬度為 83 的 td 元素,跳過該行continue

三、代碼運行結果展示:

?

?

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

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

相關文章

樹莓集團落子海南,如何重構數字產業生態體系?

樹莓集團在海南的布局&#xff0c;是其整體商業戰略中的關鍵一環。這背后&#xff0c;是對政策機遇、產業協同、以及區域優勢的深度考量。 政策機遇 海南自貿港建設帶來前所未有的政策紅利&#xff0c;包括貿易、投資、資金等方面的自由便利。樹莓集團緊抓這一機遇&#xff0…

Ollama本地部署deepseek-r1蒸餾版

Docker安裝Ollama 拉取鏡像 docker pull ollama/ollama? 啟動-使用GPU docker run -d --gpusall -p 11434:11434 --name ollama ollama/ollamadocker run : Docker 的核心命令&#xff0c;用于創建并啟動一個新的容器。 -d : 后臺模式&#xff08;detached mode&#xff09…

41.HarmonyOS NEXT Layout布局組件系統詳解(八):自定義樣式與類

溫馨提示&#xff1a;本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦&#xff01; HarmonyOS NEXT Layout 布局組件系統詳解&#xff08;八&#xff09;&#xff1a;自定義樣式與類 文章目錄 HarmonyOS NEXT Layout 布局組件系統詳…

【Go | 從0實現簡單分布式緩存】-7:增加etcd和gRPC功能

本文目錄 1.序2.引入etcd緩存流程項目結構 3.gocachepb.proto4.服務注冊register.go5.服務發現discover.go6.gRPC客戶端client.gopeers.goclient.go 7.gRPC服務端實現server.go一些問題緩存獲取流程緩存設置流程為什么要帶超時的上下文&#xff1f; 1.序 GeeCache項目并沒有引…

Pytorch系列教程:可視化Pytorch模型訓練過程

深度學習和理解訓練過程中的學習和進步機制對于優化性能、診斷欠擬合或過擬合等問題至關重要。將訓練過程可視化的過程為學習的動態提供了有價值的見解&#xff0c;使我們能夠做出合理的決策。訓練進度必須可視化的兩種方法是&#xff1a;使用Matplotlib和Tensor Board。在本文…

18 | 實現簡潔架構的 Handler 層

提示&#xff1a; 所有體系課見專欄&#xff1a;Go 項目開發極速入門實戰課&#xff1b;歡迎加入我的訓練營&#xff1a;云原生AI實戰營&#xff0c;一個助力 Go 開發者在 AI 時代建立技術競爭力的實戰營&#xff1b;本節課最終源碼位于 fastgo 項目的 feature/s14 分支&#x…

藍隊第三次

1.了解什么是盲注 盲注&#xff08;Blind SQL Injection&#xff09;是SQL注入的一種形式&#xff0c;攻擊者無法直接通過頁面回顯或錯誤信息獲取數據&#xff0c;而是通過觀察頁面的布爾狀態&#xff08;真/假&#xff09;或時間延遲來間接推斷數據庫信息。例如&#xff0c;通…

sql server 2016 版本補丁說明

包信息和發布類型 Microsoft為創建和分發的 SQL Server 的所有軟件更新包采用了標準化命名架構。 軟件更新包是一個可執行文件&#xff08;.exe 或 .msi&#xff09;文件&#xff0c;其中包含一個或多個文件&#xff0c;這些文件可能應用于 SQL Server 安裝以更正特定問題。 …

STM32之I2C硬件外設

注意&#xff1a;硬件I2C的引腳是固定的 SDA和SCL都是復用到外部引腳。 SDA發送時數據寄存器的數據在數據移位寄存器空閑的狀態下進入數據移位寄存器&#xff0c;此時會置狀態寄存器的TXE為1&#xff0c;表示發送寄存器為空&#xff0c;然后往數據控制寄存器中一位一位的移送數…

從青銅到王者:六大排序算法實戰解析

前言 在編程的世界里,排序算法如同一顆璀璨的明珠,閃耀著智慧的光芒。它不僅是計算機科學的基礎知識點,更是每一位程序員必備的技能。今天,就讓我們一同走進排序算法的世界,深入探究冒泡排序、選擇排序、插入排序、快速排序、歸并排序、堆排序這六大經典算法的精髓所在,…

小程序配置webview

1.在微信公眾平臺配置業務域名 1&#xff09;包括把校驗文件放在服務器根目錄 2&#xff09;配置域名 2.在小程序中 新建文件 小程序新建頁面&#xff1a;web-view json配置&#xff1a;{ "pageOrientation": "landscape", "renderer":&qu…

不用 Tomcat?SpringBoot 項目用啥代替?

在SpringBoot框架中&#xff0c;我們使用最多的是Tomcat&#xff0c;這是SpringBoot默認的容器技術&#xff0c;而且是內嵌式的Tomcat。 同時&#xff0c;SpringBoot也支持Undertow容器&#xff0c;我們可以很方便的用Undertow替換Tomcat&#xff0c;而Undertow的性能和內存使…

線索二叉樹構造及遍歷算法

線索二叉樹構造以及遍歷算法 線索二叉樹&#xff08;中序遍歷版&#xff09;構造線索二叉樹構造雙向線索鏈表遍歷中序線索二叉樹 線索二叉樹&#xff08;中序遍歷版&#xff09; 中序遍歷找到對應結點的前驅&#xff08;土方法&#xff09; #mermaid-svg-eunGO5d2GhjLxCn5 {fo…

基于SpringBoot的“體育購物商城”的設計與實現(源碼+數據庫+文檔+PPT)

基于SpringBoot的“體育購物商城”的設計與實現&#xff08;源碼數據庫文檔PPT) 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 系統總體模塊設計 前臺用戶登錄界面 系統首頁界面…

數據篇| App爬蟲入門(一)

App 的爬取相比 Web 端爬取更加容易,反爬蟲能力沒有那么強,而且數據大多是以 JSON 形式傳輸的,解析更加簡單。在 Web 端,我們可以通過瀏覽器的開發者工具監聽到各個網絡請求和響應過程,在 App 端如果想要查看這些內容就需要借助抓包軟件。常見抓包軟件有: ?工具名稱??…

go context學習

1.Context接口2.emptyCtx3.Deadline()方法4.Done()方法5.Err方法6.Value方法&#xff08;&#xff09;7.contex應用場景8.其他context方法 1.Context接口 Context接口只有四個方法&#xff0c;以下是context源碼。 type Context interface {Deadline() (deadline time.Time, …

在VMware Workstation Pro上輕松部署CentOS7 Linux虛擬機

首先我們需要下載VM虛擬機和Centos7的鏡像 下載并安裝VMware Workstation Pro 訪問VMware Workstation Pro官網下載 https://www.vmware.com/ 第二步&#xff1a;下載centos7鏡像 訪問centos官網下載 https://www.centos.org/ 開始部署Centos7 點擊創建新的虛擬機 這里是Cen…

Jsoup 解析商品信息時需要注意哪些細節?

在使用Jsoup解析商品信息時&#xff0c;需要注意以下細節和最佳實踐&#xff0c;以確保爬蟲的穩定性和數據的準確性&#xff1a; 1. 檢查HTML文檔的合法性 在解析之前&#xff0c;需要確認所解析的文檔是否是一份合法正確的HTML文檔。如果HTML結構不完整或存在錯誤&#xff0…

Android AudioFlinger(五)—— 揭開AudioMixer面紗

前言&#xff1a; 在 Android 音頻系統中&#xff0c;AudioMixer 是音頻框架中一個關鍵的組件&#xff0c;用于處理多路音頻流的混音操作。它主要存在于音頻回放路徑中&#xff0c;是 AudioFlinger 服務的一部分。 上一節我們講threadloop的時候&#xff0c;提到了一個函數pr…

go的”ambiguous import in multiple modules”

執行“go mod tidy”報如下錯誤&#xff1a; go mod tidy -compat1.17 go: finding module for package github.com/gomooon/goredis go: found github.com/gomooon/goredis in github.com/gomooon/goredis v0.3.5 go: github.com/gomooon/core importsgithub.com/gomooon/gor…