整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          新手用python爬蟲自己做天氣預報查詢

          新手用python爬蟲自己做天氣預報查詢

          近小編在學習爬蟲,就想找個東西練練手,小說、圖片、音樂什么的都爛大街了,正好最近天氣是越來越冷,小編窩家里自己敲了個天氣簡單查詢的代碼,請大家指正下!

          先找目標,最終還是選用了中國天氣網,url:http://www.weather.com.cn/

          找到目標后,開始分析網頁,發現里面是支持查詢,并且查詢的城市和url又一定的規律,如下:

          百度下后,發現url中的數字是城市代碼,這就簡單了,先把代碼弄到,然后做成字典。

          然后,分析網頁的元素,發現近7天的預報都已經整整齊齊的放在那里了,這就簡單了,開始寫代碼吧!

          選定方法,這里小編用的是xpath,方便、快捷。

          需要提前安裝lxml庫,然后導入

          import requests
          from lxml import etree

          為了方便查詢,直接寫input,然后拼接網址

          city=input("請輸入要查詢的城市:")
          city_code=city_code_list[city]
          home_page='http://www.weather.com.cn'
          url=home_page + '/weather/' + city_code + '.shtml'

          解析拼接好的網址,這里小編用requests獲取get內容

          def get_html(url):
          header={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0'}
          html=requests.get(url, headers=header)
          html.encoding='utf-8'
          return html.text
          html=etree.HTML(get_html(url))

          然后開始查找路徑

          date=html.xpath('//ul[@class="t clearfix"]/li[{}]/h1/text()'.format(i))

          由于7天的預報都是在li標簽下的,所以寫到循環中,print輸出即完成!

          最后效果如下:

          簡單的功能實現,成就感滿滿的!

          代碼放上:

          city=input("請輸入要查詢的城市:")
          city_code=city_code_list[city]
          home_page='http://www.weather.com.cn'
          url=home_page + '/weather/' + city_code + '.shtml' #city_code + '.shtml'
          def get_html(url):
          header={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0'}
          html=requests.get(url, headers=header)
          html.encoding='utf-8'
          return html.text
          html=etree.HTML(get_html(url))
          for i in range(1,8):
          date=html.xpath('//ul[@class="t clearfix"]/li[{}]/h1/text()'.format(i))[0]#日期
          weather=html.xpath('//ul[@class="t clearfix"]/li[{}]/p[1]/text()'.format(i))[0]#天氣
          tem1=html.xpath('//ul[@class="t clearfix"]/li[{}]/p[@class="tem"]/span/text()'.format(i))
          tem2=html.xpath('//ul[@class="t clearfix"]/li[{}]/p[@class="tem"]/i/text()'.format(i))
          tem=tem1[0]+'/'+ tem2[0]#拼接溫度最高/最低
          win1=html.xpath('//ul[@class="t clearfix"]/li[{}]/p[@class="win"]/i/text()'.format(i))
          win2=html.xpath('//ul[@class="t clearfix"]/li[{}]/p[@class="win"]/em/span[1]/@title'.format(i))
          win=win2[0]+ win1[0]#拼接風力大小
          print(date,weather,tem,win)

          喜歡就關注一波唄(^_^),想和小編一起學習Python的,可以私信小編哦。

          號準備

            到 心知天氣 - 高精度氣象數據 - 天氣數據 API 接口 - 行業氣象解決方案 (seniverse.com) 注冊一個賬號,復制出來密鑰,后面代碼里面用到的 key 就是這個密鑰。

          ESP8266/ESP32 開發板安裝

            已安裝可忽略這一步驟,本文內容基于 Arduino IDE 2.1.0 編寫。ESP8266/ESP32 開發板環境安裝詳細見文章 Arduino 1.8、Arduino IDE 2.0 上配置 ESP8266/ESP32 開發板開發環境 - 自由向往的程序猿 (demo1984s.com)

          依賴庫安裝

          Time

            安裝方式:依次打開菜單“工具 - 管理庫“,搜索”Time“進行安裝。

          GxEPD2

            安裝方式:依次打開菜單“工具 - 管理庫“,搜索”GxEPD2“進行安裝。

          U8g2

            安裝方式:依次打開菜單“工具 - 管理庫“,搜索”U8g2“進行安裝。

          ArduinoJson

            安裝方式:依次打開菜單“工具 - 管理庫“,搜索”ArduinoJson“進行安裝。

          U8g2_for_Adafruit_GFX

            安裝方式:依次打開菜單“項目 - 導入庫 - 添加 .ZIP 庫“,選擇提供的文件“U8g2_for_Adafruit_GFX.zip”進行安裝。

          U8g2_wqy

            安裝方式:依次打開菜單“項目 - 導入庫 - 添加 .ZIP 庫”,選擇提供的文件“U8g2_wqy.zip”進行安裝。這里要注意 U8g2_wqy 漢字字體庫的使用。
          U8g2_wqy 采用文泉驛點陣宋體作為源本,提供 12x12、13x13、14x14、15x15 和 16x16 點陣字庫:

          • chinese1、chinese2、chinese3 為 u8g2 官方提供的小字符集。
          • gb2312 是完整的 GB2312 簡體中文編碼 字符集。(作者強烈推薦使用這種字體,漢字全)
          • gb2312a 只有 GB2312 01、02 和 16 到 55 以及部分 08 區的編碼。沒有包含全角標點符號,如 !,請用半角 ! 代替。
          • gb2312b 只有 GB2312 01 到 55 的編碼,其中 10 到 15 區為空區。比 gb2312a 多一些額外的符號。

            字庫選擇以最簡適用為原則,否則會導致程序過大編譯的時候拋出 section '.irom0.text' will not fit in region 'irom0_0_seg' 的失敗提示。

          字體名

          字符數

          字節

          u8g2_font_wqy12_t_chinese1

          411

          9,491

          u8g2_font_wqy12_t_chinese2

          574

          13,701

          u8g2_font_wqy12_t_chinese3

          993

          25,038

          u8g2_font_wqy12_t_gb2312a

          4041

          111,359

          u8g2_font_wqy12_t_gb2312b

          4531

          120,375

          u8g2_font_wqy12_t_gb2312

          7539

          208,228

          u8g2_font_wqy13_t_chinese1

          411

          10,341

          u8g2_font_wqy13_t_chinese2

          574

          14,931

          u8g2_font_wqy13_t_chinese3

          993

          27,370

          u8g2_font_wqy13_t_gb2312a

          4041

          121,327

          u8g2_font_wqy13_t_gb2312b

          4531

          130,945

          u8g2_font_wqy13_t_gb2312

          7539

          227,383

          u8g2_font_wqy14_t_chinese1

          411

          11,368

          u8g2_font_wqy14_t_chinese2

          574

          16,443

          u8g2_font_wqy14_t_chinese3

          993

          30,200

          u8g2_font_wqy14_t_gb2312a

          4040

          133,898

          u8g2_font_wqy14_t_gb2312b

          4530

          143,477

          u8g2_font_wqy14_t_gb2312

          7538

          251,515

          u8g2_font_wqy15_t_chinese1

          411

          12,590

          u8g2_font_wqy15_t_chinese2

          574

          18,133

          u8g2_font_wqy15_t_chinese3

          993

          33,165

          u8g2_font_wqy15_t_gb2312a

          4041

          147,563

          u8g2_font_wqy15_t_gb2312b

          4531

          158,713

          u8g2_font_wqy15_t_gb2312

          7539

          276,938

          u8g2_font_wqy16_t_chinese1

          411

          14,229

          u8g2_font_wqy16_t_chinese2

          574

          20,245

          u8g2_font_wqy16_t_chinese3

          993

          37,454

          u8g2_font_wqy16_t_gb2312a

          4041

          169,286

          u8g2_font_wqy16_t_gb2312b

          4531

          182,271

          u8g2_font_wqy16_t_gb2312

          7539

          318,090

          ESP-Seniverse

            安裝方式:依次打開菜單“項目 - 導入庫 - 添加 .ZIP 庫”,2023 年 5 月 10 日前的選擇“ESP-SeniverseV0.0.1.zip”進行安裝,2023 年 5 月 10 日后的選擇“ESP-SeniverseV0.0.2.zip”進行安裝,V0.0.2 相對 V0.0.1 改動較大,不兼容。

          驅動板與開發板引腳接線

            代碼修改引腳的地方在文件 GxEPD2_display_selection_new_style.h 里面。
            ESP8266 開發板:


            ESP32 開發板:

            樣例代碼:

          1GxEPD2_DISPLAY_CLASS display(GxEPD2_DRIVER_CLASS(/*CS=*/ 2, /*DC=*/ 0, /*RST=*/ 4, /*BUSY=*/ 5));
          

          NodeMCU-12F(CP2102), 4MB(ESP8266)

            以下是我使用的墨水屏驅動板與開發板引腳連接關系,可供參考(注意數字的含義:以 BUSY 為例,5 表示 GPIO5):

          1驅動板 開發板(GPIO)
          2BUSY	D1(5)
          3RST	D2(4) // 部分驅動板上標注的是RES
          4DC	D3(0)
          5CS	D4(2)
          6CLK	D5(14) // 部分驅動板上標注的是SCK
          7SDA	D7(13) // 部分驅動板上標注的是DIN
          8GND	GND
          93V3	3.3V // 部分驅動板同時支持或者只有3V或5V,根據實際情況連接
          

            具體也可根據自己的實際需要進行修改。

          ESP32-DevKitC, 4MB(32D、32E)

            引腳分布圖,可見原文 https://docs.espressif.com/projects/arduino-esp32/en/latest/boards/ESP32-DevKitC-1.html

            以下是我使用的墨水屏驅動板與開發板引腳連接關系,可供參考:

          ESP32-DevKitC-32D, 4MB

          1驅動板 開發板(GPIO)
          2BUSY	21
          3RST	16 // 部分驅動板上標注的是RES
          4DC	17
          5CS	5
          6CLK	18 // 部分驅動板上標注的是SCK
          7SDA	23 // 部分驅動板上標注的是DIN
          8GND	GND
          93V3	3.3V // 部分驅動板同時支持或者只有3V或5V,根據實際情況連接
          

          ESP32-DevKitC-32E, 4MB

            與 32D 差異是 BUSY 換了一個腳,也可以使用其他 GPIO 腳。需要注意的是網上買的開板引腳布局和樂鑫官方的可能會有一點差異,一般賣家都會提供引腳布局圖。建議引腳統一接在開發板同一側,這樣會比較方便。

          1驅動板 開發板
          2BUSY	4
          3RST	16 // 部分驅動板上標注的是RES
          4DC	17
          5CS	5
          6CLK	18 // 部分驅動板上標注的是SCK
          7SDA	23 // 部分驅動板上標注的是DIN
          8GND	GND
          93V3	3.3V // 部分驅動板同時支持或者只有3V或5V,根據實際情況連接
          

          合宙 ESP32C3, 4M

            引腳分布圖,可見原文 ESP32C3-CORE 開發板 - LuatOS 文檔

          1驅動板 開發板
          2BUSY	11
          3RST	10 // 部分驅動板上標注的是RES
          4DC	5
          5CS	7
          6CLK	4 // 部分驅動板上標注的是SCK
          7SDA	6 // 部分驅動板上標注的是DIN
          8GND	GND
          93V3	3.3V // 部分驅動板同時支持或者只有3V或5V,根據實際情況連接
          

            這里需要注意的是 BUSY 引腳用到了特殊引腳 GPIO11(GPIO11 默認為 SPI flash 的 VDD 引腳),這里因為之前搗鼓項目已經配置過 GPIO11 引腳(ESP32C3 解鎖使用 IO11),所以直接用了。

            以上引腳對應連接關系具體也可根據自己的實際需要進行修改。有問題可以到小黃魚上找,部分文章為方便已購買的魚友而寫,部分文章日常愛好搗鼓過程中有感而發。


          更多內容可到小黃魚上找我

          然發現一個國外的網站接入了天氣板塊,很有意思的是該網站所有的天氣圖標都是會動的。

          于是我便有了學(chao)習(xi)的念頭,我們來一探究竟。

          一、順藤摸瓜

          通過審查元素,我們很快定位到了一個叫 skycons 的 js 類庫,順藤摸瓜找到了 github 地址,順手下載了一份 skycons.js 文件。

          OK,萬事具備,下面我們開始分步剖析。

          二、簡單示例

          首先,添加 canvas,并設置 id,以備后續使用,寬高可以隨意設置,如下:

          其次,我們實例化 Skycons:

          然后,在我們的元素上通過 canvas id 來添加動畫,并選擇動畫類型:

          最后,別忘了,播放它:

          通過調用 skycons.play() 來播放動畫。

          這樣,一個簡單的示例就完成了,是不是很簡單呢?下面我們來看看參數詳解。

          三、參數詳解

          可設置的天氣類型參數:

          • CLEAR_DAY
          • PARTLY_CLOUDY_DAY
          • CLOUDY
          • RAIN
          • SLEET
          • SNOW
          • WIND
          • FOG

          添加動畫:

          播放動畫:

          skycons.play();
          

          暫停動畫:

          skycons.pause()
          

          動態更改 icon :

          skycons.set('jartto1', Skycons.PARTLY_CLOUDY_NIGHT);
          

          為什么要動態更改,因為天有不測風云,你的天氣信息一定要及時。

          移除動畫:

          skycons.remove('jartto2');
          

          四、實際應用

          為了更好的說明問題,我們來做一個天氣板塊的完整示例:

          首先,引入 skycons 文件:

          其次,創建html結構:

          最后,添加 js 代碼:

          是不是很簡單呢,更多請查看 Demo:

          https://github.com/chenfengyanyu/my-web-accumulation/tree/master/skycons
          

          五、問題匯總

          1.實際的天氣狀況可能有很多,而 skycons 提供的選擇并不多;

          解決方案:合并同類的天氣狀況,可能的代碼如下:

          六、源碼分析

          因為看不到文檔,所以很好奇,大概瞅了一些源碼。當然,也并不是一無所獲,譬如:

          1.requestAnimationFram 的兼容處理:

          2.add 方法:

          add 方法操作的是一個數組,也就意味著,我們只需要實例化一次 skycons 就可以添加多個 icons 。

          3.定時器的時間設置技巧 1000 / 60,動畫更加流暢:

          起初不太理解作者為何要設置這個數值,后來才意識到:

          大多數電腦顯示器的刷新頻率是 60 Hz,大概相當于每秒鐘重繪 60 次。

          大多數瀏覽器都會對重繪操作加以限制,不超過顯示器的重繪頻率,因為即使超過那個頻率用戶體驗也不會有提升。

          因此,最平滑動畫的最佳循環間隔是 1000 ms / 60,約等于 16.6 ms 。

          4.各種 canvas 畫太陽,云彩,風等方法,可以參考。

          源碼比較簡單,詳情請查看:

          https://github.com/chenfengyanyu/my-web-accumulation/blob/master/skycons/skycons.js

          七、效果一覽

          是不是很有意思,快來試試吧!附上 Demo 地址:

          https://github.com/chenfengyanyu/my-web-accumulation/tree/master/skycons
          

          八、熱門原創文章

          1.HTML5 之音頻合成(Speech Synthesis)

          2.DevOps 簡介

          3.前端反思錄(三)—談談個人規劃


          主站蜘蛛池模板: 亚洲国产精品一区| 国产视频一区二区| 亚洲熟妇无码一区二区三区| 亚洲一区二区三区电影| 亚洲区精品久久一区二区三区| 亚洲一区中文字幕在线电影网| 亚洲制服丝袜一区二区三区| 精品无码综合一区二区三区| 又紧又大又爽精品一区二区| 亚洲爽爽一区二区三区| 无码日韩精品一区二区三区免费| 亚洲AV日韩综合一区尤物| 国产伦精品一区二区三区四区| 一区二区三区免费视频播放器| 国产精品视频一区二区三区四| 99精品国产一区二区三区2021| 国产福利在线观看一区二区| 相泽亚洲一区中文字幕| 91精品福利一区二区| 丰满岳乱妇一区二区三区| 日韩一区二区三区无码影院| 国内精自品线一区91| 国产亚洲情侣一区二区无码AV| 亚洲一区二区三区久久久久| 鲁大师成人一区二区三区| 日韩精品视频一区二区三区| 国产成人高清亚洲一区久久| 亚洲AV综合色区无码一区爱AV | 国产精品成人一区无码| 国产亚洲无线码一区二区| 日韩欧美一区二区三区免费观看| 久久久不卡国产精品一区二区| 亚洲日本久久一区二区va| 久久无码人妻精品一区二区三区| 亚洲国产AV一区二区三区四区| 国产精品无码一区二区三区电影| 日韩免费一区二区三区| 亚洲制服中文字幕第一区| 国产精品成人国产乱一区| 精品欧美一区二区在线观看| 午夜影视日本亚洲欧洲精品一区 |