小叮噹高級爬蟲(二):Scrapy創建項目「五部曲」獲取豆瓣電影信息

2021-01-09 IT小叮噹

在這炎炎夏季,當你百無聊賴時,在這「枯藤老樹昏鴉,空調wifi西瓜」的閒暇時刻,

你是否也是「夕陽西下,就往沙發上一趴」?

何不看一部電影?放鬆一下我們疲勞已久的神經。

那麼,問題來了?有什麼好的電影值得我們去看呢?所幸,豆瓣電影評分機制給予了我們一定的參考,

我們可以在百度中搜索「豆瓣電影分類排行榜」來獲得相應的電影信息。

例如,我們點擊「豆瓣電影分類排行榜 - 劇情片」進去後,默認的是」好於75%-65%「的推薦。

看一部低端的電影浪費我們的人生,還不如去玩一局LOL活得開心,因此,小叮噹選擇的是」好於100%-90%"的電影信息。

那麼,我下次想找電影看呢?難道還需要再來訪問一遍豆瓣,來獲得這些電影信息?

當然是不用,下面,小叮噹就為大家分享,如何使用Python中的Scrapy框架,來獲取豆瓣的電影信息。

還不了解Scrapy的夥伴們,可以去看下「小叮噹高級爬蟲(一):爬蟲利器Scrapy」。

巴金先生有他的「激流三部曲」,《家》、《春》、《秋》;

而小叮噹卻有「Scrapy五部曲」,比巴金先生還多了兩部,就問巴金先生「慌不慌」。

哈哈,下面我們言歸正傳,先來看看Scrapy項目的「五部曲」。

Scrapy項目五部曲

(1)分析網頁

判斷我們將要爬取的網頁數據是靜態還是動態。

(2)使用命令創建Scrapy項目

scrapy startproject 項目名

(3)明確爬取目標

定義items.py文件內容,明確將要爬取的目標

(4)使用命令創建爬蟲文件

在系統生成的Scrapy項目的」spiders「文件夾下使用命令:scrapy genspider 爬蟲名稱 網頁域名

(5)存儲數據

完善管道文件pipelines.py,存儲爬取的數據。

通過Scrapy獲取豆瓣電影信息

為方便新手,以下Scrapy的使用是在windows7的環境下。

(1)分析豆瓣電影信息

以我們剛才搜索到的「豆瓣電影分類排行榜 - 劇情片」為例。

我們在360瀏覽器中按下F12,選擇「network",之後選擇」xhr",拖動滾動條,發現Name下方有數據出現,且隨滾動條的滾動而增多。這說明頁面是動態頁面。我們單擊選擇其中一條,在右側框裡查看它的請求地址。

注意:爬蟲新手推薦使用谷歌瀏覽器或是火狐瀏覽器(當你熟悉了,什麼瀏覽器都是可以。大家不要糾結這個問題)

點擊瀏覽器上方的」+「號,新建網頁,將我們剛才查看到的請求地址粘到地址欄中,進行訪問。

可以看到,訪問的結果已是我們的電影信息。

為方便新手操作,小叮噹將網址粘到火狐中為大家演示。

對比一下就可以發現,還是火狐的數據可視化效果好,便於新手查找數據。觀察數據,第一個電影是」星際穿越「,不是我們在網頁中看到的」肖申克的救贖「。

此時我們將數據網址的」start"值改為「0」。

按下回車進行訪問,發現此時數據中的第一個已為「肖申克的救贖」,和我們在網頁中看到的一致。

(2)使用命令創建Scrapy項目

小叮噹先在磁碟空間較大的H盤創建文件夾「Scrapy項目」,並進入。

按住鍵盤「shift"鍵,右擊滑鼠,在出現的選項中選擇」在此處打開命令窗口「。

我們在打開的命令窗口中輸入命令:scrapy startproject douban_movie 其中」douban_movie"是我們自定義的項目名稱,表示「豆瓣電影」。

此時我可以發現」Scrapy項目「文件夾下多了我們剛才使用命令創建的」douban_movie「項目。

(3)明確爬取目標

我們以爬取目標為「電影名稱」、「電影評分」、「電影詳情連結」為例給大家分享。(大家可以根據自己的需求確定爬取的目標)

我們用pycharm打開H盤中我們創建的「douban_movie」Scrapy爬蟲項目。

在"視圖"工具欄中將「project"項目視圖點開,或是直接使用」Alt+1"的快捷鍵。

在左側的視圖窗口中雙擊"items.py"。

通過"Scrapy.Field()"方法,我們將目標實例化。

(4)使用命令創建爬蟲文件

我們以同樣的方法,打開H盤我們創建的「douban_movie」項目中的「spiders"文件夾,按住鍵盤「shift"鍵,右擊滑鼠,在出現的選項中選擇」在此處打開命令窗口「。

在打開的命令窗口中輸入命令:scrapy genspider catch_movie douban.com

其中」catch_movie"表示爬蟲名字,「douban.com"表示要抓取的網頁的域名。

之後,我們在pycharm下點擊」spiders"文件夾,發現系統已為我們創建好「catch_movie.py"爬蟲文件。

雙擊「catch_movie.py",出現系統為我們創建好的爬蟲模板。

編寫爬蟲文件,使之符合我們的需求。我們將"start_urls"欄位值改寫為我們分析好的網頁地址。在「parse」解析函數下,我們使用print語句將內容列印出來,進行測試。

雙擊」settings.py",將「ROBOTSTXT_OBEY = True」協議前加上「#」注釋掉,將「user_agent"欄位前」#「去掉,將其值設置為我們在瀏覽器中看到的值。

運行爬蟲進行初步測試,在剛才的命令窗口中輸入:scrapy crawl catch_movie 其中「catch_movie"是我們創建的爬蟲名字。

此時我們已經可以看到爬取的整個頁面。

測試能拿到數據後,我們來正式編寫爬蟲。

用yield來返回item使得函數可迭代,節省內存空間,提高程序運行效率。

(5)存儲數據

我們,雙擊」pipelines.py",進行管道文件的編寫,來存儲我們爬取的數據。

我們導入json,將最後的數據寫為json格式,定義函數open_spider在爬蟲執行時,打開文件準備寫入,在系統模板process_item中編寫數據寫入過程,最後定義函數close_spider關閉文件。

其中需注意:①打開文件時,一定要設定編碼格式,例如設置為encoding=「utf-8"

②在調用dumps寫成json格式時,一定要寫」ensure_ascii=False「使ascii碼為關閉狀態,不然爬取的數據無法正常顯示中文。

切記,一定要到」settings.py"中將「ITEM_PIPELINES」前的注釋去掉,以表示啟用管道文件。

其中的數字300表示優先級,數字越小,優先級越高。(以供在管道文件中定義多個類時使用)

最後,我們在命令窗口中輸入命令:scrapy crawl catch_movie 運行爬蟲

運行結束,可看到spiders文件夾下多了一個「douban_movie.json」的文件,這表示我們的數據存儲成功。

Scrapy豆瓣電影項目的完善

為使大家更好地明白Scrapy項目的完整步驟,上述的爬虫部分只編寫了前20條電影信息的數據,現在我們來完善「catch_movie.py」文件,爬取全部電影信息。

(1)首先我們設置網址偏移offset用來構造出所有的電影信息網址。

(2)當我們遞歸爬取網址時,一定要設置終止條件,不然我們的程序會一直運行。當我們爬取不到電影信息時,我們得到的電影列表肯定為空列表,所以我們可以以此來return,終止遞歸。

(3)根據我們分析網頁的規律,每次偏移量加20,以此構造新的爬蟲請求,並將其用yield返回給引擎。

(4)再次運行爬蟲,查看結果。

可以看到,運行完善後的Scrapy豆瓣電影爬蟲項目,我們已經可以拿到全部的電影數據信息。

相關焦點

  • 使用Scrapy shell調試一步一步開發爬蟲
    本文不同,本文並不著重如何寫一個爬蟲項目,而是一步一步地教會你、一行一行地寫出具體的爬蟲代碼本文以爬取時光網電影的TOP100的電影信息為例,需要爬取信息的首頁地址為http://www.mtime.com/top/movie/top100/本文是基於Scrapy寫成的,因此在測試本文之前應先安裝Scrapy包 首先輸入如下命令來查看是否可正常訪問該網站:
  • 看大神如何用Python爬蟲探究《前任3》為什麼這麼火爆!
    以下來自一名偉大的程式設計師,他分析了微信的一篇文章得出火的結論是「分手」,他想自己作為一名程式設計師,應該靠事實說話,於是靠Python爬蟲爬取了一下豆瓣的影評?採集豆瓣影評插播一下,有不會爬蟲的小夥伴們,可以回復文章,然後戳小編,後臺回復「爬蟲」即可獲得爬蟲框架資料及爬蟲項目實戰學習資料流程如下:創建一個Scrapy項目;定義提取的Item;編寫爬取網站的 spider 並提取 Item;編寫 Item Pipeline 來存儲提取到的Item(即數據)。
  • Python爬蟲數據抓取方法匯總!所有方法都在此!
    一、第一種方法通常用來獲取靜態頁面內容,比如豆瓣電影內容分類下動畫對應的連結:1http://www.douban.com/tag/%E5%8A%A8%E7%94%BB/?
  • Python爬蟲追美劇?你咋這麼溜溜溜『上篇』
    別著急,今天這篇文章講的只是爬蟲相關部分,還有一篇文章,專門講皮爺怎麼講這個爬蟲放到網上,然後讓大家自己填寫配置信息,然後供大家使用,到時候只需要填寫,你要接受美劇更新信息的郵箱,還有你要追的美劇就可以了。到時候會放到 https://peekpa.tech 網站裡面。
  • Python爬蟲獲取豆瓣電影並寫入excel
    這篇文章主要介紹了Python爬蟲獲取豆瓣電影並寫入excel ,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值
  • Python漫畫爬蟲——漫畫喵的100行代碼逆襲
    安裝virtualenvvirtualenv是一個常用的用來創建python環境的工具。小喵用這個有兩個原因,一是為了不汙染本機的環境,二是在本機直接安裝庫的時候出了一個權限的問題。virtualenv的安裝十分簡單,使用pip工具就可以安裝。待程序執行結束,你就會開心的發現自己已經有了virtualenv這個工具了。
  • 如何用Python和Scrapy將Web轉化為數據
    pipenv install scrapy在這一點上,您有了Scrapy,但是您仍然需要創建一個新的web抓取項目,並且Scrapy為我們提供了一個命令行來完成這項工作。現在讓我們使用scrapy cli創建一個名為web_scraper的新項目。
  • 爬蟲 | 如何快速獲取網頁URL連結
    在上一篇推文Gooseeker抓取豆瓣電影排行榜-劇情片中,我向大家分享了如何爬取「豆瓣排行榜-劇情片」這個類別中評分在前10%的電影。
  • 小叮噹Python進階(二):爬蟲與加密算法Part2之DES
    Python實現DES首先要確保已經安裝好Cryptodome模塊,若未安裝,可參考「小叮噹Python進階(二):爬蟲與加密算法Part1」進行安裝。
  • Python爬蟲學到什麼程度就可以去找工作了?
    去招聘網上看看需求都有哪些,直接做個拉勾網爬蟲(有需要的私信)出結果了:仔細看看,我們可以得出以下幾點:1、 python 不是唯一可以做爬蟲的,很多語言都可以,尤其是 java,同時掌握它們和擁有相關開發經驗是很重要的加分項2、 大部分的公司都要求爬蟲技術有一定的深度和廣度,深度就是類似反反爬、加密破解
  • 不用代碼玩轉爬蟲實例(1) - 抓取貓眼電影信息
    其實完全不用寫代碼一樣可以玩爬蟲!今天這篇文章開始就來陸續分享一下關於web scraper這款chrome插件的一些實例用法。關於web scraper,之前介紹了很多次了。使用它可以方便的僅僅通過滑鼠進行簡單配置,就可以爬取你所想要數據。例如電影信息、電商網站商品信息、知乎回答列表、微博熱門、微博評論等等。
  • 騰訊視頻 Python 爬蟲項目實戰
    需求:經常在騰訊視頻上看電影,在影片庫裡有一個"豆瓣好評"板塊。我一般會在這個條目下面挑電影。但是電影很多,又缺乏索引,只能不停地往下來,讓js加載更多的條目。然而前面的看完了,每次找新的片就要拉很久。所以用爬蟲將"豆瓣好評"裡的電影都爬下來整理到一個表中,方便選片。
  • Node.js爬蟲實戰 - 爬你喜歡的
    首先咱們說哈,爬蟲不是「蟲子」,姑涼們不要害怕。爬蟲 - 一種通過一定方式按照一定規則抓取數據的操作或方法。開篇第二問:爬蟲能做什麼嘞?來來來,談談需求產品MM:愛豆的新電影上架了,整體電影評價如何呢?暗戀的妹子最近又失戀了,如何在她發微博的時候第一時間知道發了什麼,好去呵護呢?總是在看小說的時候點到廣告?
  • Python 爬蟲實戰:貓眼電影
    ·背景  筆者上一篇文章《基於貓眼票房數據的可視化分析》中爬取了貓眼實時票房數據,用於展示近三年電影票房概況。由於數據中缺少導演/演員/編劇陣容等信息,所以爬取貓眼電影數據進行補充。關於爬蟲的教學內容,網絡上一搜就有很多了,這裡我以個人的爬蟲習慣,介紹此次過程中所用到的庫和代碼。流程圖,如下圖所示:
  • 手把手教你打造屬於自己的電影網站
    最強大的爬蟲框架,沒有之一!注意,他不是一個簡簡單單的庫,而是一個框架。實現了從url匹配,到數據下載,數據解析,數據存儲等一套完整的組件。讓你寫爬蟲更加輕鬆,更加健壯,更加高效。我們也是用這個框架來幫我們處理爬蟲,這樣我們可以不間斷的批量的爬取電影信息,然後存儲到資料庫中。Scrapy也不是Python內置的,需要通過pip install scrapy安裝。
  • 關於反爬蟲,看這一篇就夠了
    那麼如果沒有反爬蟲,對方就可以批量複製我們的信息,我們的競爭力就會大大減少。 競爭對手可以抓到我們的價格,時間長了用戶就會知道,只需要去競爭對手那裡就可以了,沒必要來攜程。這對我們是不利的。3、爬蟲是否涉嫌違法? 如果是的話,是否可以起訴要求賠償?這樣可以賺錢。
  • 《蟻人2》豆瓣影評爬蟲+簡單情感分析+詞雲
    作者:量化小白H     Python愛好者社區專欄作者個人公眾號:量化小白上分記今天是《蟻人2》國內上映的第19天,作為練手
  • python爬蟲實戰:爬取全站小說排行榜
    重點在和大家一起分享一些爬蟲的思路和一些很常遇到的坑。 一、爬取單本小說爬取該網站相對來講還是很容易的,打開編輯器(推薦使用PyCharm,功能強大),首先引入模塊urllib.request(Python2.x的引入urllib和urllib2即可,待會我把2.x的也寫出來給大家看看),給出網站URL,寫下請求,再添加請求頭(雖然這個網站不封號,但作者建議還是要養成每次都寫請求頭的習慣,萬一那天碰到像豆瓣似的網站
  • python爬蟲—豆瓣電影top250及數據可視化!
    豆瓣電影top250榜單想必大家都不陌生,上榜的電影都是經過時間的沉澱留下來比較經典。本次教程就是利用requests庫實現對於top250榜單電影數據爬取,並對爬取的數據繪製圖表進行可視化,做簡單的數據分析。文章將分為兩個部分:top250數據爬蟲和數據可視化。