iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
AI & Data

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

【Day 25】- 什麼幾百張幾千張的貓貓圖片,戳一戳就結束了(實戰 requests 向 API 請求獲得回應)

前情提要

昨天介紹了 Postman 這款 API 管理、測試工具,也在上面測試了貓貓圖片的 API 發送請求。

開始之前

今天要帶各位實戰的是,利用 Python 中的 requests 庫對 API 發送請求,以此達到取得資料的效果,這在許多前端與後端溝通上十分常見,這次要寫的便是對 API 的網路爬蟲。

實戰

這次要使用的 API 是 https://api.thecatapi.com/v1/images/search

對其發送 GET 請求,會有一個 JSON 格式的回應。

接下來寫個 requests 對該 API 進行請求,並用 json.loads 對其解析為 JSON。

import requests
import json
if __name__ == '__main__':
    url = 'https://api.thecatapi.com/v1/images/search'
    resp = requests.get(url)
    json_resp = json.loads(resp.text)
    print(json_resp)
'''
[{'breeds': [], 'id': 'vHtfrMonD', 'url': 'https://cdn2.thecatapi.com/images/vHtfrMonD.jpg', 'width': 1265, 'height': 951}]
'''

會發現貓咪圖片放在 [0]['url'] 下,再來讀入使用者傳入的數字,接下來寫個 for-loop 執行該次數次,每次對其發出請求,並把結果新增至一個 list 當中。

import requests
import json

if __name__ == '__main__':
    result_list = []
    catime = int(input("請輸入要取得幾張貓咪圖片 : "))
    for _ in range(catime):
        url = 'https://api.thecatapi.com/v1/images/search'
        resp = requests.get(url)
        json_resp = json.loads(resp.text)
        result_list.append(json_resp[0]['url'])
    print(result_list)

最後,將其存入一個 JSON 檔案中。使用者輸入完數字後,等個幾秒,一堆的貓貓圖片就會變成一個檔案了~

import requests
import json

if __name__ == '__main__':
    result_list = []
    catime = int(input("請輸入要取得幾張貓咪圖片 : "))
    for _ in range(catime):
        url = 'https://api.thecatapi.com/v1/images/search'
        resp = requests.get(url)
        json_resp = json.loads(resp.text)
        result_list.append(json_resp[0]['url'])
    with open('Cat_images.json', 'w', encoding='utf-8') as f:
        json.dump(result_list, f, indent=2,
                  sort_keys=True, ensure_ascii=False)

結語

今天帶各位用 requests 戳貓咪 API,成功獲得很多貓貓圖片。

明日內容

明天會帶各位實戰爬取拿到 CDC 的確診者數量 API 。

補充資料

CatAPI https://api.thecatapi.com/v1/images/search


上一篇
【Day 24】- 用方便的 Postman 儲存或測試 API
下一篇
【Day 26】- 分析衛生福利部疾病管制署(CDC)官網並取得確診者 API,並用小程式及時取得官方確診者數量(實戰分析網站向外請求 API 加快爬蟲節奏)
系列文
網路爬蟲,萬物皆爬 - 30 天搞懂並實戰網路爬蟲及應對反爬蟲技術30

尚未有邦友留言

立即登入留言