華文網

小白學Scrapy?神級程式師一行一行代碼教你!豬都能學會了!哈哈

環境搭建:

關於這一點,對在Windows環境下使用的小夥伴來說,請務必使用我之前提到的 Anaconda 這個Python的發行版本本,不然光環境的各種報錯就能消磨掉你所有的學習興趣!如果你也是程式設計的學習者或者已經學會了的程式設計者!小編這裡有個群:103456743!大家可以加下,裡面遍佈了全國各地的學習者!為大家提供一個交流平臺,

不管平時有碰到什麼BUG或者學習過程中卡殼,找不到人替你解決?那麼就進來吧,裡面熱心的小夥伴還是非常多的,管理也是挺好的,有什麼問題,他如果有時間都能給大家解決,我覺得是一個非常不錯的交流平臺,沒事也可以和大家扯扯公司的事學校發生的趣事,群檔已經上傳了好多G的資料,PDF,視頻 安裝工具,安裝教程都是有的,為了大家的學習能更進一步!也為了大家能愉快的交流,
討論學術問題!所以你還在等什麼呢?好了馬上給大家帶來正文!

OK項目創建完成。現在可以開始我們的爬取之旅了! 下面是目錄中各個檔的作用

基礎工作準備完畢!我們來說說基本思路。

上面的準備工作完成之後,我們先不要著急開始工作,

畢竟作為一個框架,還是很複雜的;貿然上手 開整,很容易陷入懵逼狀態啊!一團漿糊,理不清思路,後面的事情做起來很很麻煩啦!

我們來看看下面這張圖:

資料在整個Scrapy的流向:

程式運行的時候,

引擎:Hi!Spider, 你要處理哪一個網站?

Spiders:我要處理23wx.com

引擎:你把第一個需要的處理的URL給我吧。

Spiders:給你第一個URL是XXXXXXX.com

引擎:Hi!調度器,我這有request你幫我排序入隊一下。

調度器:好的,正在處理你等一下。

引擎:Hi!調度器,把你處理好的request給我,

調度器:給你,這是我處理好的request

引擎:Hi!下載器,你按照下載中介軟體的設置幫我下載一下這個request

下載器:好的!給你,這是下載好的東西。(如果失敗:不好意思,這個request下載失敗,然後引擎告訴調度器,這個request下載失敗了,你記錄一下,我們待會兒再下載。)

引擎:Hi!Spiders,這是下載好的東西,並且已經按照Spider中介軟體處理過了,你處理一下(注意!這兒responses預設是交給def parse這個函數處理的)

Spiders:(處理完畢資料之後對於需要跟進的URL),Hi!引擎,這是我需要跟進的URL,將它的responses交給函數 def xxxx(self, responses)處理。還有這是我獲取到的Item。

引擎:Hi !Item Pipeline 我這兒有個item你幫我處理一下!調度器!這是我需要的URL你幫我處理下。然後從第四步開始迴圈,直到獲取到你需要的資訊,

注意!只有當調度器中不存在任何request了,整個程式才會停止,(也就是說,對於下載失敗的URL,Scrapy會重新下載。)

以上就是Scrapy整個流程了。

第一步定義欄位:

好了,我們來做 第一步 定義一些欄位;那具體我們要定義那些欄位呢?

這個根據自己需要的提取的內容來定義。

比如:我們爬取小說網站都需要提取些什麼資料啊?

小說名字、作者、小說位址、連載狀態、連載字數、文章類別

就像下面這樣:

你會發現在紅色狀態報告之後,所有頁面幾乎是一瞬間出現的;那是因為Scrapy使用了非同步啦!ヽ(°◇° )ノ

另外因為Scrapy遵循了robots規則,如果你想要獲取的頁面在robots中被禁止了,Scrapy是會忽略掉的哦!!ヾ(。 ̄□ ̄)ツ゜゜゜

請求就這麼輕而易舉的實現了啊!簡直So Easy!

繼續 繼續!

我們需要曆遍所有頁面才能取得所有的小說頁面連接:

每個頁面的這個位置都是最後一個頁面,我們提取出它,曆遍就可以拼接出一個完整的URL了ヾ§  ̄▽)ゞ2333333

Go Go

瞅見沒 我們需要的東西,快用F12工具看一下吧,在什麼位置有什麼標籤,可以方便我們提取資料。還不知道怎麼看的小夥伴,去看看妹子圖那個教程,有教哦;實在不行百度一下也行!

過程忽略了,直接上代碼(主要是懶癌來了):

前面三行不說了,

第三十七和三十八行:是我們的小說名字和URL

第三十九行和第四十行;大夥兒可能會發現,多了個一個meta這麼一個字典,這是Scrapy中傳遞額外資料的方法。因我們還有一些其他內容需要在下一個頁面中才能獲取到。

下面我的爬蟲進入了這個頁面:

這個頁面就有很多我們需要的資訊了:廢話不說了代碼上來:

我現在教教大家怎麼處理這些資料:對頭就是說說Pipeline了:

對於基本的Pipeline存儲方式,網上有很多教程了,今天我們做一個自訂的MySQL的Pipeline:

首先為了能好區分框架自帶的Pipeline,我們把MySQL的Pipeline單獨放到一個目錄裡面。

PS :注意MySQL的默認埠是 3306;我自己的MySQL改成了3389。這兒各位酌情自己更改。

在開始寫sql.py之前,我們需要安裝一個Python操作MySQL的包,來自MySQL官方的一個包:點我下載

下載完成後解壓出來,從CMD進入該目錄的絕對路徑,然後 Python setup.py install ;即可完成安裝

下面是我們的sql.py文件:

Nice!sqi.py這一部分我們完成,來開始寫pipeline吧:

第一行至第二行:我們導入了之前編寫的sql.py中的Sql類,和我們建立的item

第六行:建立了一個DingdianPipeline的類(別忘了一定要繼承object這個類啊,這是做啥的不用多瞭解,說多了你們頭暈,我也懶)

第八行:我們定義了一個process_item函數並有,item和spider這兩個參數(請注意啊!這兩玩意兒 務必!!!要加上!!千萬不能少!!!!務必!!!務必!!!)

第十行:你這樣理解如果在 item中存在DingdianItem;就執行下麵的。

第十一行:從item中取出 name_id的值。

第十二行:調用Sql中的select_name函數獲得返回值

第十三行:判斷ret是否等於1 ,是的話證明已經存了

第二十行:調用Sql中的 insert_dd_name函數,存儲上面幾個值。

搞完!下面我們啟用這個Pipeline在settings中作如下設置:

PS: dingdian(專案目錄).mysqlpipelines(自己建立的MySQL目錄).pipelines(自己建立的pipelines文件).DingdianPipeline(其中定義的類) 後面的 1 是優先順序程度(1-1000隨意設置,數值越低,組件的優先順序越高)

好!我們來運行一下試試!!Go Go Go!

Nice!!完美!!我之前運行過了 所以提示已經存在。

下面我們開始還剩下的一些內容獲取:小說章節 和章節內容

首先我們在item中新定義一些需要獲取內容的欄位:

代碼不解釋了哦!(懶癌來了,寫不下去了)

繼續編寫Spider檔:

Sql.py:

不解釋了哦!

下麵是Pipeline:

到此收工!!!!

講的這麼透徹了,怕是個豬都能學會了!哈哈

如有侵權請聯繫小編刪除哦!

下載器:好的!給你,這是下載好的東西。(如果失敗:不好意思,這個request下載失敗,然後引擎告訴調度器,這個request下載失敗了,你記錄一下,我們待會兒再下載。)

引擎:Hi!Spiders,這是下載好的東西,並且已經按照Spider中介軟體處理過了,你處理一下(注意!這兒responses預設是交給def parse這個函數處理的)

Spiders:(處理完畢資料之後對於需要跟進的URL),Hi!引擎,這是我需要跟進的URL,將它的responses交給函數 def xxxx(self, responses)處理。還有這是我獲取到的Item。

引擎:Hi !Item Pipeline 我這兒有個item你幫我處理一下!調度器!這是我需要的URL你幫我處理下。然後從第四步開始迴圈,直到獲取到你需要的資訊,

注意!只有當調度器中不存在任何request了,整個程式才會停止,(也就是說,對於下載失敗的URL,Scrapy會重新下載。)

以上就是Scrapy整個流程了。

第一步定義欄位:

好了,我們來做 第一步 定義一些欄位;那具體我們要定義那些欄位呢?

這個根據自己需要的提取的內容來定義。

比如:我們爬取小說網站都需要提取些什麼資料啊?

小說名字、作者、小說位址、連載狀態、連載字數、文章類別

就像下面這樣:

你會發現在紅色狀態報告之後,所有頁面幾乎是一瞬間出現的;那是因為Scrapy使用了非同步啦!ヽ(°◇° )ノ

另外因為Scrapy遵循了robots規則,如果你想要獲取的頁面在robots中被禁止了,Scrapy是會忽略掉的哦!!ヾ(。 ̄□ ̄)ツ゜゜゜

請求就這麼輕而易舉的實現了啊!簡直So Easy!

繼續 繼續!

我們需要曆遍所有頁面才能取得所有的小說頁面連接:

每個頁面的這個位置都是最後一個頁面,我們提取出它,曆遍就可以拼接出一個完整的URL了ヾ§  ̄▽)ゞ2333333

Go Go

瞅見沒 我們需要的東西,快用F12工具看一下吧,在什麼位置有什麼標籤,可以方便我們提取資料。還不知道怎麼看的小夥伴,去看看妹子圖那個教程,有教哦;實在不行百度一下也行!

過程忽略了,直接上代碼(主要是懶癌來了):

前面三行不說了,

第三十七和三十八行:是我們的小說名字和URL

第三十九行和第四十行;大夥兒可能會發現,多了個一個meta這麼一個字典,這是Scrapy中傳遞額外資料的方法。因我們還有一些其他內容需要在下一個頁面中才能獲取到。

下面我的爬蟲進入了這個頁面:

這個頁面就有很多我們需要的資訊了:廢話不說了代碼上來:

我現在教教大家怎麼處理這些資料:對頭就是說說Pipeline了:

對於基本的Pipeline存儲方式,網上有很多教程了,今天我們做一個自訂的MySQL的Pipeline:

首先為了能好區分框架自帶的Pipeline,我們把MySQL的Pipeline單獨放到一個目錄裡面。

PS :注意MySQL的默認埠是 3306;我自己的MySQL改成了3389。這兒各位酌情自己更改。

在開始寫sql.py之前,我們需要安裝一個Python操作MySQL的包,來自MySQL官方的一個包:點我下載

下載完成後解壓出來,從CMD進入該目錄的絕對路徑,然後 Python setup.py install ;即可完成安裝

下面是我們的sql.py文件:

Nice!sqi.py這一部分我們完成,來開始寫pipeline吧:

第一行至第二行:我們導入了之前編寫的sql.py中的Sql類,和我們建立的item

第六行:建立了一個DingdianPipeline的類(別忘了一定要繼承object這個類啊,這是做啥的不用多瞭解,說多了你們頭暈,我也懶)

第八行:我們定義了一個process_item函數並有,item和spider這兩個參數(請注意啊!這兩玩意兒 務必!!!要加上!!千萬不能少!!!!務必!!!務必!!!)

第十行:你這樣理解如果在 item中存在DingdianItem;就執行下麵的。

第十一行:從item中取出 name_id的值。

第十二行:調用Sql中的select_name函數獲得返回值

第十三行:判斷ret是否等於1 ,是的話證明已經存了

第二十行:調用Sql中的 insert_dd_name函數,存儲上面幾個值。

搞完!下面我們啟用這個Pipeline在settings中作如下設置:

PS: dingdian(專案目錄).mysqlpipelines(自己建立的MySQL目錄).pipelines(自己建立的pipelines文件).DingdianPipeline(其中定義的類) 後面的 1 是優先順序程度(1-1000隨意設置,數值越低,組件的優先順序越高)

好!我們來運行一下試試!!Go Go Go!

Nice!!完美!!我之前運行過了 所以提示已經存在。

下面我們開始還剩下的一些內容獲取:小說章節 和章節內容

首先我們在item中新定義一些需要獲取內容的欄位:

代碼不解釋了哦!(懶癌來了,寫不下去了)

繼續編寫Spider檔:

Sql.py:

不解釋了哦!

下麵是Pipeline:

到此收工!!!!

講的這麼透徹了,怕是個豬都能學會了!哈哈

如有侵權請聯繫小編刪除哦!