在練習Python AJAX爬蟲時,因為想要抓取多頁資料,碰到了Python爬蟲中文網址問題,在網路上找到答案(使用parse.quote解決),並成功連續抓取KKday資料,寫了一個查詢用的爬蟲小程式。

本篇文章內容
Python AJAX動態抓取
前一篇Python Ajax爬蟲實戰,抓取KKday行程 【Python練習Day11】,拿KKday網站練習,利用Python進行網路連線,使用Chrome開發者工具找到真正的資料網址。
但實務上,應該不會這樣一頁一頁去找(太花時間),因此希望能結合之前學到的技巧,寫成一支小程式,讓使用者輸入關鍵字、Python程式自動抓取資料。
Python中文網址問題
這邊用了Ajax爬蟲和連續抓取的技巧,但很快就碰上問題。
由於使用者輸入時用的是「中文」,網站撈取資料時會將中文網址轉碼,而在Python中會造成錯誤。
錯誤訊息

Python爬蟲中文網址解決
最後在網路上找到解決方式,利用內建模組urllib中的parse即可解決。
import urllib.parse as parse kw_url=parse.quote(kw) #----->將中文網址做轉換
Python中文網址爬蟲練習(Kkday多頁)
功能:
- 讓使用者輸入想要查詢的行程關鍵字
- 連線到kkday抓取資料總頁數
- 印出資料總頁數,讓使用者決定要印出幾頁資料
- 利用迴圈連續抓取資料
- 印出行程標題、介紹、報名網址
import sys import urllib.request as req import urllib.parse as parse import json def kkday(): kw=input("關鍵字:") kw_url=parse.quote(kw) url="https://www.kkday.com/zh-tw/product/ajax_productlist/?country=&city=&keyword="+str(kw_url) n=1 #建立一個request物件,附加request headers資訊 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" }) #模擬一般使用者User-Agent with req.urlopen(request) as response: #data=response.read().decode("utf-8") #根據觀察,取得的資料為Json格式 data=json.load(response) total_page=data["total_page"] print("相關行程總頁數:"+str(total_page)) pages=int(input("需要抓取頁數:")) print(str(data["page_title"])) print("-----------------") while n< pages: print("------【正在抓取第"+str(n)+"頁資料】------") url="https://www.kkday.com/zh-tw/product/ajax_productlist/?country=&city=&keyword="+str(kw_url)+"&page="+str(n) print(url) 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" }) #模擬一般使用者User-Agent with req.urlopen(request) as response: cdata=json.load(response) clist=cdata["data"] for cdata in clist: print(cdata["name"]) print(cdata["introduction"]) print(str(cdata["price"])+" "+cdata["currency"]) print(cdata["url"]) print("-----------------") n=n+1 kkday()
執行結果:

本次練習檔與影片
練習檔網址:Day12-2(12/29):網路爬蟲(Web Crawler) KKay連續抓取
影片列表:Python 網路爬蟲 Web Crawler 教學 – AJAX / XHR 網站技術分析實務
【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電影版
發佈留言