前言:在之前我們學習了scrapy框架的基本使用,今天我們通過實戰(爬取http://www.doutula.com的套圖)來更加瞭解scrapy框架額使用,僅以此來告別我們的爬蟲入門,後續會有一些反爬,驗證碼識別,數據分析的文章。下次我們就從基礎開始學習python,中間也有可能會穿插一些有趣的東 ...
前言:在之前我們學習了scrapy框架的基本使用,今天我們通過實戰(爬取http://www.doutula.com的套圖)來更加瞭解scrapy框架額使用,僅以此來告別我們的爬蟲入門,後續會有一些反爬,驗證碼識別,數據分析的文章。下次我們就從基礎開始學習python,中間也有可能會穿插一些有趣的東西。來幫助我們學習python。
註意:很多人學Python過程中會遇到各種煩惱問題,沒有人幫答疑。為此小編建了個Python全棧免費答疑交流.裙 :一久武其而而流一思(數字的諧音)轉換下可以找到了,不懂的問題有老司機解決裡面還有最新Python教程項目可拿,,一起相互監督共同進步!
一、爬取表情包思路(http://www.doutula.com)
1、打開網站,點擊最新套圖
2、之後我們可以看到沒有套圖,我們需要提取每個套圖的連接
3、獲取連接之後,進入頁面提取圖片就好了
4、我們可以發現該網站還穿插有廣告,我們需要過濾點廣告
二、實戰
關於新建項目我們就不再多說了。不知道的可以看看這篇文章:scrapy的基本使用
1、首先我們提取第一頁的url

通過上圖我們可以發現我們想要的url全在class名為col-sm-9的div下,
紅色框的部分為廣告。不是a標簽,所以我們就不用過濾了。我們直接選取col-sm-9下的直接子節點即可
寫下如下代碼:

值得註意的是在settings.py中需要添加頭信息和將robots.txt協議修改為False

我們打上斷點調試一下:

我們發現我們想要的信息已經提取出來了。
註意:在Request中的mate參數,是用來傳遞參數的,傳遞給下一個方法使用。使用方法和字典相似。
2、完善item
我們只需要三個欄位,什麼系列,圖片url,圖片名稱。

3、提取item中我們需要的欄位

4、下一頁

5、保存
因為對scrapy保存圖片沒有研究,所以就自己寫保存圖片的方法。
在pipelines.py種添加如下代碼:

並且在settings.py中添加:

6、運行
直接報錯,所以我們在settings.py添加頭信息
運行一段時候後又報錯了,看來需要隨機更換表頭信息。
這裡我們使用第三方庫很方便,pip3 install fake_useragent
安裝成功後我們在middlewares.py中導入:from fake_useragent import UserAgent
添加如下代碼:

在settings.py文件中添加

運行main文件:

即可。
小結:
效果圖:

問題:
在運行過程中遇到了四個問題:
1、沒有獲取大到圖片連接:
可能這個網站有兩個版本獲取的css方式不一樣。
解決方法:可以使用xpath中的|(或)來解決
2、沒有獲取到圖片名稱
解決方法:同上
3、圖片名稱相同
解決方法:可以使用md5加密後添加,你也可以使用你自己的方法
4、在圖片名中含有?/\等非法字元
解決方法:可以通過正則過濾,如果md5加密,那麼一下解決兩個問題。
雖然有些圖片沒有獲取到,但是還是爬取了很多。有興趣的可以嘗試去修改。
註意:很多人學Python過程中會遇到各種煩惱問題,沒有人幫答疑。為此小編建了個Python全棧免費答疑交流.裙 :一久武其而而流一思(數字的諧音)轉換下可以找到了,不懂的問題有老司機解決裡面還有最新Python教程項目可拿,,一起相互監督共同進步!
本文的文字及圖片來源於網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。