denise-jans-1126562-unsplash
 程式與統計資料處理

網路爬蟲 web crawler | 奇摩電影 yahoo movies | using Python

本篇學習筆記將要示範如何使用 Python 來執行 網路爬蟲 web crawler,並以爬取雅虎奇摩電影的「每週新片」頁面資訊為例。筆記包含以下部分:(1)解讀網頁資訊 (2) 萃取資訊 (3) 將資訊整理成data frame (4) 將電影爬蟲寫成函式 (5) 自動化判斷所有分頁url並套用電影爬蟲函數。

(1) 解讀網頁資訊

載入所需套件

指定URL資訊

解讀(parse)網頁HTML

(2) 將「每週新片」的中英文片名、電影介紹、預告片連結爬下來

2-1. 中英文片名

先找到中英文片名在html架構中的規則(可右鍵點擊感興趣物件,並選擇「檢查」)(如下圖)。

網路爬蟲-web-crawler

並使用.find_all()找出soup中物件為’div’且class_類別為”release_movie_name”的所有元素,集結成一個list (named newMovie2),每個元素彼此使用逗號間隔。

但每個class = ”release_movie_name”的元素中,並不是每個標籤都是我們感興趣的,為了萃取感興趣資訊,我們再從newMovies2 list中,一個一個元素去找出class = ‘gabtn’ 的標籤中的文字(如下段落所示),並將換行與空白字符取消,存取成一個新的list (named NameCHs)

gabtn” data-ga=”[‘本週新片’,’本週新片_本週新片第1頁’,’密弑遊戲’]”
href=”https://movies.yahoo.com.tw/movieinfo_main/
%E5%AF%86%E5%BC%91%E9%81%8A%E6%88%B2-escape-room-9572″>密弑遊戲

同理,找出英文片名的文字。

2-2. 預告片連結

一樣,檢視感興趣目標在HTML中的結構規則。

網路爬蟲-web-crawler

找出所有class_為release_btn color_btnbox的div。

並從newMovie3 list中,進一步取出元素中class_為btn_s_vedio gabtn連結標籤中的連結href。

2-3. 電影介紹文

檢查介紹文的HTML規則,發現介紹文會夾帶在class = ‘release_text’的div中。

網路爬蟲-web-crawler

取出介紹文,並清理換行等符號。

檢查NameCHs, NameENs, Intros, links陣列的長度是否相同(結果皆為10)。

(3) 將以上欄位合併成data frame

網路爬蟲-web-crawler

由於以上只是「本週新片」中的其中一個分頁的電影爬蟲結果,如果想要快速爬取其他分頁的資訊,可將電影爬蟲寫成一個function。

(4) 將電影爬網規則寫成function

define 一個名為「yahooMovieParser」的函數,並以url為投入參數。

執行單一URL: 手動指定url並投入函式。

網路爬蟲-web-crawler

執行多個URLs

將多個 url包成一個陣列 list 使用迴圈執行並回傳一個data frame

螢幕快照 2019-03-03 上午10.32.13

但由於分頁的URLs都還是人工判斷,如果可以用程式規則判斷並蒐集所有分頁,將省去更多工。

(5) 自動判斷分頁資訊,蒐集urlList

首先,一樣先找到分頁資訊的區塊,並檢視其HTML結構。發現分頁資訊會被包含在class = ‘page_numbox’的div物件中。

網路爬蟲-web-crawler

撰寫一個萃取分頁URL資訊的函式。

  • 將分頁資訊的每個
  • 元素中的連結取出,假設沒有連結資訊,則回傳None。

測試函式getNext()執行一次的結果。

使用while迴圈反覆執行,直到getNext()回傳None。

檢視所有的分頁連結 (當分頁數很多時特別有效)

綜合(1) ~ (5)電影爬蟲程式碼,自動化執行url List蒐集並爬取每個分頁下的最新電影資訊的程式碼如下:

螢幕快照 2019-03-03 上午10.32.13


更多Python網路爬蟲學習筆記:

網路爬蟲 Web Crawler | 資料不求人 基礎篇 | using Python BeautifulSoup

網路爬蟲 web crawler | 奇摩電影 yahoo movies | using Python

Text Mining & 網路爬蟲 web crawler | Google新聞與文章文字雲 | Python