python實戰 天氣api 爬蟲系列
簡介還再找免費的天氣api介面嗎,這裡給你答案
開發語言:python
技術方案:requests + sqlalchemy
感謝python,(資料來源:官方中國天氣網
正文查詢資料來源
google開啟天氣網,搜了下北京天氣,alt+cmd+i開啟除錯模式(mac快快捷鍵),network檢視資料**。經過分析,基本可以確定資料主要**於2個介面: (地之一)和 (位址二),多開啟了幾個別的城市進行檢視,最後結論:101010100引數一城市的id值,1537709265753引數二時間戳(毫秒級)。
城市id的第三位,第四位是表示省份(免費普及一下:中國34個省級行政區域,包括23個省,5個自治區,4個直轄市,2個特別行政區),01-北京,02-上海,03-天津,04-重慶。。。34-台灣。
後三位尾數,針對於直轄市,尾數從000開始計數,非直轄市尾數從001開始計數。
天氣網資料細到鄉鎮,街道。鄉鎮的id:101080503(cityid) + ***(數字,001開始),12位組成;街道資料過於細緻,沒必要獲取,而且本人能力有限,只初始化了到城市級別的的資料。
額外贈送:中國每個省份的城市最大值位21,**中會用到。
知道規律,也了解了request url,response,就可以搞定城市id的資料來源了。解決方法如下:
語言:python
思想:依據id的範圍生成範圍id,requests去get請求,獲取結果
要點:省份的標誌位01~04位直轄市,05~34非直轄市,城市的標誌位01~23即可;header必須含有referer值,應該用來做乙個訪問標識response返回值型別是string,但是weatherinfo的資訊為json,需轉化。不多說,直接上**:
資料入庫
資料庫決定直接用sqlite,主要考慮到資料庫的可移植性,git專案直接執行就可以,不用額外配置資料庫,而且單張表,資料量不會很大,效能沒有太高要求。python + requests + sqlalchemy + db,玩py的不知道sqlalchemy&&requests,自己趕快惡補一下吧。。。廢話也不多說,git專案看db.py檔案,建立表以及資料庫見下圖:
城市id獲取的整理流程設計ok,執行python citys.py就可以見證奇蹟。不過,這個奇蹟有點慢而已,我的本大概執行了30個小時左右,後來想的是python配合多程序(gil機制,不要使用多執行緒)來提速,搞了個pool在那,不過我把多程序注釋了,有興趣的人可以去試下多程序。
api介面服務
做web服務,flask是不錯的選擇,簡單易用,效能也不差。用blueprint做了個weather的介面,但是資訊由位址一與位址二組成,位址一主要用來獲取最高/最低溫度,位址二獲取實時的天氣相關資訊,請求的位址引數均由第三步回去的城市id以及時間戳。
測試這裡介紹2種測試方式,postman + curl。
postman:圖形化介面。。。自己點把
沒有curl命令的,自己搞下,做開發的話,不知道curl,會很low的,看下結果,完美:
總結**很簡單,不過在獲取資料源id上花費了一些時間,後來一想,城市id的表有個問題,表有:id,cityname,cityid 3個字段,沒有記錄省份,查詢同名的城市可能會有問題,後續在改吧。。。就先到這裡了,我是程式猿,python程式猿。
C 中,有哪四個與型別轉換相關的關鍵字
特點 靜態轉換,在編譯處理期間。應用場合 主要用於c 中內建的基本資料型別之間的轉換,但是沒有執行時型別的檢測來保證轉換的安全性。用於基類和子類之間的指標或引用之間的轉換,這種轉換把子類的指標或引用轉換為基類表示是安全的 進行下行轉換,把積累的指標或引用轉換為子類表示時,由於沒有進行動態型別檢測,所...
學習Overture打譜需要學會哪四個字?
任何學習都是痛苦的,無論是學習鋼琴還是學習打譜都是如此。不過只要掌握其中的竅門,那麼學習起來就如履平地,變痛苦為快樂。我們只需要學會這四個字,就能輕鬆學會overture打譜了。剛開始使用overture來進行打譜時,總會遇到很多軟體使用和專業有關的問題,我們要學會乙個字 靜,對待打譜困難處不能強攻...
型別轉換四個關鍵字
首先,c 與型別轉換相關的四個關鍵字有 const cast,static cast,dynamic cast,reinterpret cast.什麼是型別轉換?表示式是否合法取決於運算元的型別,而且合法的表示式其含義也由運算元型別決定。但是在c 中,某些型別之間存在相關的依賴關係。若兩種型別相關,...