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 當中。

  1. get_max_page: 取得評論的頁數
  2. next_page_button: 下一頁按鈕的 element
  3. scrap_review: 爬取評論的主要程式
  4. 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 以及任何想法跟我分享!

--

--

蘇靖軒 Jenson
企鵝也懂程式設計

鵝肝前端佐後端風味醬汁,少許資料分析點綴,人生的擺盤,done