iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0
AI & Data

網路爬蟲,萬物皆爬 - 30 天搞懂並實戰網路爬蟲及應對反爬蟲技術系列 第 26

【Day 26】- 分析衛生福利部疾病管制署(CDC)官網並取得確診者 API,並用小程式及時取得官方確診者數量(實戰分析網站向外請求 API 加快爬蟲節奏)

前情提要

昨天實戰了用 Python 向貓咪圖片的 API 請求。使用者可以輸入一個數字,讓程式可以爬取多張貓咪照片。

開始之前

今天要實戰的是分析 CDC 網站,找出確診者數量的 API ,之後寫個小程式能夠向其發出請求。

實戰

衛生福利部疾病管制署官網 : https://www.cdc.gov.tw/

可以看到官網上有出現確診者的數量。

起手式,先用開發工具的 Network 功能,並按下 F5 分析一下向外與向內的流量。

接下來,那些 dash 的看起來很可疑,每個點開來看看 response 看一下內容。發現 dash3 這個的回應內容應該就是我們想要的。

我們找到了! 再來,點選 Header 看如何對其發出請求。

簡單地,這只是個普通的 GET 請求,我們能直接將 Request URL 貼到網址,看回傳的回應。

最後,只要寫個簡單的小程式向 https://covid19dashboard.cdc.gov.tw/dash3 發出 requests GET 請求。

import requests

if __name__ == '__main__':
    CDCApi = 'https://covid19dashboard.cdc.gov.tw/dash3'
    resp = requests.get(CDCApi)
    print(resp.text)

'''
{"0":{"確診":"16,305","死亡":846,"送驗":"3,602,515","排除":"3,585,122","昨日確
診":7,"昨日排除":"13,046","昨日送驗":"12,506"}}
'''

接下來,用兩種方法取出確診者的位置,轉換為 JSON 之後用字典的方式存取,或者用 regex 來取出該位置的值。

  • 將其轉換為 JSON 格式,再取出確診者的位置。
import requests
import json

if __name__ == '__main__':
    CDCApi = 'https://covid19dashboard.cdc.gov.tw/dash3'
    resp = requests.get(CDCApi)
    json_resp = json.loads(resp.text)
    print(json_resp['0']['昨日確診'])
'''
7
'''
  • 用正則表達式來取出昨日確診數。
import requests
import re

if __name__ == '__main__':
    CDCApi = 'https://covid19dashboard.cdc.gov.tw/dash3'
    resp = requests.get(CDCApi)
    regex_result = re.findall('"昨日確診":(\d+),', resp.text)
    print(regex_result[0])
'''
7
'''

結語

今天帶各位看了 CDC 官網,並找到了他們的確診者數量的 API ,撰寫了個小程式向其發出了一個請求。

關於這個 API ,筆者之前有寫一個 line bot https://github.com/Vincent550102/covid19-daily-alert 定時爬取確診者數量,並傳 line 提醒,但之後因為 Line API 的push_message 有上限就先關掉了QQ。

明日內容

明天會帶各位實戰用 Dcard 的 API 來快速爬取文章。

補充資料

CDC 官網 https://www.cdc.gov.tw/


上一篇
【Day 25】- 什麼幾百張幾千張的貓貓圖片,戳一戳就結束了(實戰 requests 向 API 請求獲得回應)
下一篇
【Day 27】- 再爬一次 Dcard ?(實戰向 Dcard API 發出請求)
系列文
網路爬蟲,萬物皆爬 - 30 天搞懂並實戰網路爬蟲及應對反爬蟲技術30

尚未有邦友留言

立即登入留言