(爬)kkday旅遊資訊並存成csv
爬取kkday旅遊資訊
今年快到要過了,往年都會安排出國旅行,但疫情問題全世界都有
旅遊上的控管限制,唉....上班備感倦怠,但其實國內也有不錯的景
點,稍微來安排一下一日遊或二日遊也不錯,至少轉換工作倦怠的
心情。
爬取kkday這個旅遊資訊
假設旅遊地我想搜尋台南,觀察網址有一個page和keywordword,page=頁數;keyword=關鍵字,
所以到時一次要爬很多頁可以把這page設成變數,keyword設成字串。
首先觀察網頁的型態,在網頁上按右鍵,再按檢視原始碼,往下拉會發現一堆Unicode編碼
,所以大概知道這是AJAX網頁類型。
接著在頁面任一地方按下右鍵,選擇"檢查",再選擇"Network",並重新整理網頁,試著找出
有用的請求網址,觀察到的如下圖:
選擇列表中的第二個,再選擇"Preview",可以看到資訊都藏在其中,以list的方式存在以下是程式碼
import requests
from pprint import pprint
import csv
class kkday():
"""
爬取kkday旅遊票券
"""
def __init__(self, cityName, page):
self.cityName=cityName
self.page=page
def getData(self):
result=[]
if self.cityName:
for i in range(1,self.page):#要查找的頁數
url='https://m.kkday.com/zh-tw/product/ajax_get_productlist?page='+str(i)+'&keyword='+\
str(self.cityName)+'&sort=rdesc'
response=requests.get(url)
activities = response.json()["data"]["productlist"]#轉成json檔
for activtie in activities:#找出json裡想要存檔的資訊
title=activtie["name"]
price=activtie["display_price"]
date=activtie['earliest_sale_date']
star=activtie['rating_count']
url=activtie["url"]
#以字典的型態加入列表裡
result.append({'標題':title,
'價格(元)':price,
'日期':date,
'評價':star,
'連結':url
})
keys=result[0].keys()#抽取字典裡的key{'key':value}
#存成csv
with open('kkday一日遊票券.csv', 'w', newline='', encoding='utf-8-sig') as f:
dw=csv.DictWriter(f, keys)
dw.writeheader()
dw.writerows(result)
return result
cityname=input("輸人想查找的城市: ")
page=eval(input("輸入想爬取的頁數:"))
kkdayR=kkday(cityname, page)
pprint(kkdayR.getData())
下圖是執行的圖片
存成csv打開來看一下有沒有存成功,果然有效率😜,出去玩沒問題了!!
留言
張貼留言