1. 程式人生 > 其它 >Python爬蟲之豆瓣電影

Python爬蟲之豆瓣電影

豆瓣電影爬蟲[GitHub]

  豆瓣電影資料庫是目前高質量電影資訊的聚集地。對於一些視訊聚合應用、資料探勘應用等場景,豆瓣電影資料庫仍然是一個很好的選擇。

  首先在Github上找到一個豆瓣爬蟲專案(唯一一個50star以上)的一個專案doubanspiders,然後進行改造。

該專案存在一些問題,並進行了完善:

  • 模擬登陸已經失效(現在已經改成滑塊,暫不實現,目前看來未登陸並不影響採集)
  • 請求會導致重定向過多的問題(重新調整header)
  • 缺少影評(只實現首頁前5條評論)、上映日期、主圖、簡介不全(過長會隱藏,導致抓取不全)
  • 缺少請求超時和重試機制

以下是 專案douban-movie的設計思路

以下是 專案douban-movie的設計思路

遍歷方式介紹

本文涉及的遍歷思路有兩種:

  • 根據id進行遍歷
  • 根據關鍵詞種子,遍歷搜尋結果

根據id進行遍歷

豆瓣電影資訊的url格式為:https://movie.douban.com/subject/id。例如:https://movie.douban.com/subject/26683290/

豆瓣是從2005年創辦的,2005年以前的電影資訊id很可能是最早的id。

搜尋1999,得到一個1998年的電影。https://movie.douban.com/subject/1303954/。id編號是七位的數字:1303954。搜尋2016,得到最新的電影。https://movie.douban.com/subject/26928204/。

id編號是八位的數字:26928204。 由此猜測,目前(2016年)豆瓣電影的id大致是1300000到27000000。

由於反爬蟲的設計,id是不連續的。為了提高命中率,需要對id的分佈規律進行分析。

根據關鍵詞種子,遍歷搜尋結果

豆瓣電影提供了搜尋介面。通過關鍵詞搜尋得到相關記錄的連結。 比如按年份獲取,關鍵詞可為:2005,2006,....2016。 比如分分類獲取,關鍵詞可為:動作,冒險,愛情,記錄...。

總結

需要較為完整的資料庫資訊,可採用id遍歷。 抓取的目的性較強時,可以採用關鍵詞抓取。

TODO:

  • 豆瓣的URL設計是比較符合RESTful規範的。根據豆瓣的id即可抓取其他相關的資源
  • 由於豆瓣的反爬蟲機制,id是稀疏。可以考慮篩選一些沒有內容的id以提高命中率。
  • 由於豆瓣限制了每個IP允許抓取的訪問次數,可以使用代理IPproxymesh來提升抓取速度
  • 更新包依賴

影評:https://movie.douban.com/subject/26366465/reviews

圖片:https://movie.douban.com/subject/26366465/all_photos

預告片:https://movie.douban.com/subject/26366465/trailer

使用說明

預設設定

  • 測試用的賬號密碼
  • 預設為csv方式儲存,儲存路徑為程式當前路徑
  • 預設遍歷方式為id遍歷
  • 安裝依賴:pip3 install -r requirements.txt

資料庫設計

很明顯,專案中的資料庫設計是不符合資料庫正規化的。為了上手容易,一切從簡。

法律義務

該爬蟲僅為個人研究。如有商業用途請與豆瓣聯絡或參考相關法律約束。