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是不連續的。為了提高命中率,需要對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
資料庫設計
很明顯,專案中的資料庫設計是不符合資料庫正規化的。為了上手容易,一切從簡。
法律義務
該爬蟲僅為個人研究。如有商業用途請與豆瓣聯絡或參考相關法律約束。