Python Ajax爬蟲實戰,抓取KKday行程 【Python練習Day11】

Python Ajax爬蟲和一般爬取HTML最大不同,在於使用者瀏覽網頁時,網站會先載入HTML的「殼」,再由動態的方式載入資料。這篇除了參考彭彭老師的教學影片外,也參考了LEARN CODE WITH MIKE大大的文章。

By.

min read

iphone dark notebook pen

pexels-photo

在Python爬蟲練習中,Ajax網頁和一般爬取HTML最大不同,在於使用者瀏覽網頁時,網站會先載入HTML的「殼」,再由動態的方式載入資料。這篇除了參考彭彭老師的教學影片外,也參考了LEARN CODE WITH MIKE大大的文章。

Python Ajax爬蟲
ython Ajax爬蟲實戰,抓取KKday行程 【Python練習Day11】

AJAX動態載入抓取資料

由於AJAX是動態載入的關係,我們連線時的網址只是網站的外殼(框架),必須利用Chrome內建的開發者工具找到真正的資料網址,並進行爬蟲撈取。

爬蟲KKday

如何利用Chrome內建的開發者工具找到真正的資料網址
KKday溫泉頁面為例。

1.網頁中按下F12開啟開發者工具

AJAX動態載爬蟲-python

打開KKday溫泉頁面,按下鍵盤上的F12,會開啟Chrome的開發者工具。

2.選擇表單中的[Network],並重新整理

image-5

選擇表單中的[Network],並按下鍵盤F5,會載入所有的網頁連線資料。

3.依序點開XHR資料,找到真正的資料來源

網路爬蟲(Web Crawler)

依序點開每一個XHR(AJAX)資料,找到真正的資料來源。
這邊可以使用Preview功能找比較快。

4.回到Headers選項,複製真正的Request URL

回到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 Ajax爬蟲

【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電影版

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *