記錄 疫情 數據爬蟲 python分析

背景

  • 天天早上第一時間是多個平臺查找最新疫情新聞,圖表是最能展現問題的,但是看了一些平臺都只有累計數字的趨勢圖,固然看斜率能夠看得出事態的發展,可是看【新增人數】的對比圖表會更直觀一點。那麼,本身動手試試吧。
  • 數據來源:你們都必定是從一個源頭的數據獲取的,找了一下,應該是 國家衛健委的數據。

進程

  • 需求:每日定時7點--11點,每隔15分鐘,爬取內容,正則分析是否有當日的最新標題,有則獲取連接,繼續爬,獲取疫情內容,正則獲取6個數據(疑似,確認,死亡【累積人數和新增人數】)分別存入數據庫表,用echars+vue顯示累積趨勢和新增人數趨勢。
  • 開發html

    • 爬取內容(python+requests+selenium+pycookiecheat)
    • image.png
    • 多是網站設置的發爬蟲的東西,須要帶上cookies才能正常經過程序獲取正確內容。找了2天,經過postman + inspector,終於知道,須要帶上瀏覽器chrome的cookies才能正常訪問,不然返回的header是http1.1 202(什麼鬼,查了說是服務器已接收,另一個進程在處理...,反正就是不對的內容)。
    • 首選 selenium,它能夠模擬打開chrome並獲取cookies,還有不少強大的功能,是一個自動化測試的工具,
    • image.png
    • 第一天調試經過,對比chrome的cookies,同樣。
    • 次日獲取的cookies怎麼都不對,和chrome上的不一致,實在找不到緣由,只有放棄,知道的朋友請告訴我
    • 換個思路獲取chrome的cookie:cookie是本地存儲瀏覽器的緩存,必定存在本地某個地方,果真,是一個sqlite文件(/Users/XXX/Library/Application Support/Google/Chrome/Profile 4/Cookies),就是怎麼打開這個文件讀取出來就行了。
    • chrome對cookies有加密,mac和linux的加密方式還不同,mac還須要與系統匹配才能獲取解密。
    • 終於找到一個pycookiecheat,幾句代碼,完美解決。
    • image.png
    • chrome_cookies(url,file)第二個參數是默認一個Default目錄下的,我也搞不清爲何個人路徑會不同。在Profile 4下面。
    • ok,正確獲取到cookies了,就能正常獲取了。
    • 正則獲取最新列表連接地址,由於最新疫情日期是昨天的,因此日期上處理了一下。
    • image.png
    • 正則獲取詳情頁面數據,並取得各項數據,保存至數據庫,並微信提醒公衆號成員。
    • image.png
    • mac 定時任務:vue

      • 創建了一個sh,用mac的crontab設置。天天早上7點-11點,每隔15分鐘運行一次,並輸出log。(crontab多是權限的問題,拿不到cookies的密碼,改用launchctl)
      • 新建文件 /Users/*/Library/LaunchAgents/com.zuing.epid.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!-- launchctl load com.zuing.epid.plist -->
<!-- launchctl start com.zuing.epid.plist -->
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.zuing.epid.plist</string>
  <key>ProgramArguments</key>
  <array>
    <string>/Users/***/Documents/spider/epid.sh</string>
  </array>
  <key>StartCalendarInterval</key>
  <dict>
        <key>Minute</key>
        <integer>0</integer>
        <key>Hour</key>
        <integer>7</integer>
  </dict>

  <key>StartInterval</key>
  <integer>600</integer>
<key>StandardOutPath</key>
<string>/Users/zuing/Documents/spider/log</string>
<key>StandardErrorPath</key>
<string>/Users/zuing/Documents/spider/log</string>
</dict>
</plist>
  • 加載 launchctl load com.zuing.epid.plist
  • 卸載 launchctl unload com.zuing.epid.plist
  • 當即運行 launchctl start com.zuing.epid.plist
  • 修改plist文件後,必需要unload,load才起做用
  • sh代碼python

    #!/bin/sh
    
    echo '######## ' `date '+%Y-%m-%d %H:%M:%S'` '########' >> /Users/***/spider/log &&
    osascript -e 'display notification "正在獲取疫情信息" with title "獲取疫情" subtitle "......"'
    # 這裏用launchctl,前面要加encode
    PYTHONIOENCODING=utf-8 /usr/local/bin/python3 /Users/***/spider/s2.py >>/Users/***spider/log
    echo '######## done ########\n' >> /Users/***/spider/log
    * `0,15,30,45 7-11 * * * /Users/****/epid.sh`
     * 這裏當mac睡眠黑屏的時候沒有網絡,就沒法運行該腳本,仍是沒有解決,請知道的朋友告訴一下。
     * 公衆號推送和圖表vue+echarts
     * vue使用echarts
         
         ```
         # mail.js里加載
         import echarts from 'echarts'  
         Vue.prototype.$echarts = echarts
         # 在vue裏就能夠用了 
         this.myChart = this.$echarts.init(document.getElementById('chart'));
         ```

總結

  • 留下2個問題未解決linux

    • selenium沒法獲取正確的chrome的cookie
    • mac睡眠黑屏的時候沒有網絡,就沒法定時運行該腳本
  • 原來怎麼沒有作過爬蟲項目,也沒用過python,經過這幾天學習到了git

    • python 的基本語法
    • request fake_useragent BeautifulSoup 的基本用法
    • 正則的基本用法
    • 瞭解了selenium自動測試工具
    • pycookiecheat 獲取本地chrome的cookiegithub

    • shell 的基本語法
    • mac的定時任務設置 參考
    • 使用了postman + inspector的調試工具
    • 安裝了一大堆亂七八糟的東西
    • 感受全部東西都是一點一點搜出來的,可是結果仍是好的,先記錄這裏,看看明天是否能正常運行😀。

最後效果

image.png
image.png
image.png

相關文章
相關標籤/搜索