Yelp 餐廳評論爬蟲
如果你需要餐廳的評論去進行 text mining 或是資料分析,通常會想到 Googla Map 上的餐廳評論。不過在仔細觀察 Google Map 上的餐廳評論後,通常是民眾分享簡單的用餐感想(甚至有時候是抱怨),很少有對餐廳更深度的評論,以文字探勘任務來說,資料品質還是略差了一些。
Yelp 是有名的老饕餐廳評論平台,專業深入的評論是平台的一大特色,裡面的評論語料我都好想要呀!那就讓我們開始吧!
事前準備
- Python
- 理解 HTML 結構
關於 XPath
XPath 即為 XML 路徑語言,它是一種用來確定 XML 檔案中某部分位置的電腦語言。因此我們可以透過 XPath 來取得網頁的 DOM 元素,藉此進行操作。
如何取得 XPath element ?
首先,對網頁點擊右鍵並點擊檢查,便會呈現網頁的 html 程式碼。
接著,點擊 Ctrl+U (Windows PC) 或 Command+Option+U (Mac) 並選擇網頁上的元素。舉例來說,如果我們想取得餐廳名稱的 XPath,可以將鼠標移動並點擊餐廳名稱,下方的 source code panel 就會取得對應的 html element。
最後,對著選取到的 element 點擊 右鍵 > Copy > Copy full XPath 就可以成功獲取到餐廳名稱的 XPath。
/html/body/yelp-react-root/div[1]/div[3]/div[1]/div[1]/div/div/div[1]/h1
分析網頁結構及設計爬蟲策略
在這次主題中,任務是獲取餐廳的評論內容,同時我們也要抓取餐廳名稱。
在評論區塊中,我們想要取得此評論的作者、分數、刊登時間以及評論內容。
我們也注意到,網站對於不同的內容結構(例如有放圖片的評論)會有不同的 XPath,因此需要進行動態調整。
另一個重點是,網站是換頁的呈現方式,因此要讓爬蟲程式可以自動切換頁面。所以我們需要抓取到 “下一頁按鈕” 的位置。
基於以上的網頁結構分析,可以定義出以下 methods 在我們的爬蟲 script 當中。
- get_max_page: 取得評論的頁數
- next_page_button: 下一頁按鈕的 element
- scrap_review: 爬取評論的主要程式
- organize_info: 串接各頁的評論內容(dict-list)
Let’s Code
在撰寫 script 之前,記得下載與你 chrome 瀏覽器版本相同的 chromedriver,才能讓程式成功調用。
接著呼叫程式,就可以成功抓取 Yelp 餐廳的評論內容了!
URL = 'https://www.yelp.com/biz/claude-bosi-at-bibendum-london'
total_info = scrap_review(URL)
total_info = organize_info(total_info)
Hi 我是 Jesnon,如果此篇教學對你有幫助,請留下 Clap 以及任何想法跟我分享!