在Python爬蟲練習中,Ajax網頁和一般爬取HTML最大不同,在於使用者瀏覽網頁時,網站會先載入HTML的「殼」,再由動態的方式載入資料。這篇除了參考彭彭老師的教學影片外,也參考了LEARN CODE WITH MIKE大大的文章。
本篇文章內容
AJAX動態載入抓取資料
由於AJAX是動態載入的關係,我們連線時的網址只是網站的外殼(框架),必須利用Chrome內建的開發者工具找到真正的資料網址,並進行爬蟲撈取。
如何利用Chrome內建的開發者工具找到真正的資料網址
以KKday溫泉頁面為例。
1.網頁中按下F12開啟開發者工具
打開KKday溫泉頁面,按下鍵盤上的F12,會開啟Chrome的開發者工具。
2.選擇表單中的[Network],並重新整理
選擇表單中的[Network],並按下鍵盤F5,會載入所有的網頁連線資料。
3.依序點開XHR資料,找到真正的資料來源
依序點開每一個XHR(AJAX)資料,找到真正的資料來源。
這邊可以使用Preview功能找比較快。
4.回到Headers選項,複製真正的Request URL
找到對應的Ajax後,回到Headers選項,在右邊複製實際發送需求的Request URL,接下來我們就會對這個連結發出需求、取得資料。
Python Ajax爬蟲練習(Kkday)
從上方流程找到實際的Request URL後,就可以開始PythonAjax爬蟲抓取,流程其實和之前PTT爬蟲實戰一樣,只是必須多一個Json資料的解析動作。
1.載入會用到的模組&實際URL
這邊會用到內建連線模組(urllib)和Json模組,URL就是剛剛透過Chrome開發者工具找到的實際Request URL。
import urllib.request as req import json url="https://www.kkday.com/zh-tw/product/ajax_productlist/?country=&city=&keyword=%E5%8F%B0%E7%81%A3+%E6%BA%AB%E6%B3%89&availstartdate=&availenddate=&cat=&time=&glang=&sort=rdesc&page=1&row=10&fprice=*&eprice=*&precurrency=TWD"
2.建立一個request物件
request=req.Request(url, headers={ "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36", })
3.使用Json解析資料
request=req.Request(url, headers={ with req.urlopen(request) as response: data=json.load(response)
4.利用迴圈取出需要的欄位
for cdata in clist: print(cdata["name"]) print(cdata["introduction"]) print(str(cdata["price"])+" "+cdata["currency"]) print(cdata["url"]) print("-----------------")
執行結果:
【Python新手練習】相關文章
【Python新手練習】系列文,是一個行銷人學習Python的筆記,希望可以藉由練習程式,訓練更強大的邏輯思考,如果你也對這塊有興趣,這些文章或許可以幫助到你!也歡迎一起交流。
行銷人的Python練習90計畫-為什麼要學Python?
Day0:Google Colab新手Python開發環境推薦
Day1:Python變數與資料型態
Day2:Python判斷式與迴圈(流程控制)
Day3:Python函式 定義、呼叫與回傳
Day4:載入Python模組與使用
Day5:Python檔案讀取和儲存
Day6:Python亂數與統計
Day7:Python API 開放資料串接,抓取台北市政府公開資料!
Day8:Python實體物件建立與使用
Day9:Python爬蟲實戰!抓取PTT電影版
發佈留言