scrapy實戰之爬取表情包
- 2019 年 10 月 6 日
- 筆記
前言:在之前我們學習了scrapy框架的基本使用, 今天我們通過實戰(爬取http://www.doutula.com的套圖)來更加了解scrapy框架額使用,僅以此來告別我們的爬蟲入門,後續會有一些反爬,驗證碼識別,數據分析的文章。下次我們就從基礎開始學習python,中間也有可能會穿插一些有趣的東西。來幫助我們學習python。
一、爬取表情包思路(http://www.doutula.com)
1、打開網站,點擊最新套圖
2、之後我們可以看到沒有套圖,我們需要提取每個套圖的連接
3、獲取連接之後,進入頁面提取圖片就好了
4、我們可以發現該網站還穿插有廣告,我們需要過濾點廣告
二、實戰
關於新建項目我們就不再多說了。不知道的可以看看以前文章。。。
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加密,那麼一下解決兩個問題。
雖然有些圖片沒有獲取到,但是還是爬取了很多。
有興趣的可以嘗試去修改。
後台回復表情包獲取源程式碼和表情包。
完。