前言:在之前我們學(xué)習(xí)了scrapy框架的基本使用柒傻,今天我們通過實(shí)戰(zhàn)(爬取http://www.doutula.com的套圖)來更加了解scrapy框架額使用,僅以此來告別我們的爬蟲入門科贬,后續(xù)會有一些反爬,驗(yàn)證碼識別扬舒,數(shù)據(jù)分析的文章毕籽。下次我們就從基礎(chǔ)開始學(xué)習(xí)python,中間也有可能會穿插一些有趣的東西拓颓。來幫助我們學(xué)習(xí)python语婴。
一、爬取表情包思路(http://www.doutula.com)
1驶睦、打開網(wǎng)站砰左,點(diǎn)擊最新套圖
2、之后我們可以看到?jīng)]有套圖场航,我們需要提取每個(gè)套圖的連接
3缠导、獲取連接之后,進(jìn)入頁面提取圖片就好了
4溉痢、我們可以發(fā)現(xiàn)該網(wǎng)站還穿插有廣告僻造,我們需要過濾點(diǎn)廣告
二憋他、實(shí)戰(zhàn)
關(guān)于新建項(xiàng)目我們就不再多說了。不知道的可以看看這篇文章:scrapy的基本使用
1髓削、首先我們提取第一頁的url
通過上圖我們可以發(fā)現(xiàn)我們想要的url全在class名為col-sm-9的div下举瑰,
紅色框的部分為廣告。不是a標(biāo)簽蔬螟,所以我們就不用過濾了此迅。我們直接選取col-sm-9下的直接子節(jié)點(diǎn)即可
寫下如下代碼:
值得注意的是在settings.py中需要添加頭信息和將robots.txt協(xié)議修改為False
我們打上斷點(diǎn)調(diào)試一下:
我們發(fā)現(xiàn)我們想要的信息已經(jīng)提取出來了。
注意:在Request中的mate參數(shù)旧巾,是用來傳遞參數(shù)的耸序,傳遞給下一個(gè)方法使用。使用方法和字典相似鲁猩。
2坎怪、完善item
我們只需要三個(gè)字段,什么系列廓握,圖片url搅窿,圖片名稱。
3隙券、提取item中我們需要的字段
4男应、下一頁
5、保存
因?yàn)閷crapy保存圖片沒有研究娱仔,所以就自己寫保存圖片的方法沐飘。
在pipelines.py種添加如下代碼:
并且在settings.py中添加:
6、運(yùn)行
直接報(bào)錯(cuò)牲迫,所以我們在settings.py添加頭信息
運(yùn)行一段時(shí)候后又報(bào)錯(cuò)了耐朴,看來需要隨機(jī)更換表頭信息。
這里我們使用第三方庫很方便盹憎,pip3 install fake_useragent
安裝成功后我們在middlewares.py中導(dǎo)入:from fake_useragent import UserAgent
添加如下代碼:
在settings.py文件中添加
運(yùn)行main文件:
即可筛峭。
小結(jié):
效果圖:
問題:
在運(yùn)行過程中遇到了四個(gè)問題:
1、沒有獲取大到圖片連接:
可能這個(gè)網(wǎng)站有兩個(gè)版本獲取的css方式不一樣陪每。
解決方法:可以使用xpath中的|(或)來解決
2影晓、沒有獲取到圖片名稱
解決方法:同上
3、圖片名稱相同
解決方法:可以使用md5加密后添加奶稠,你也可以使用你自己的方法
4俯艰、在圖片名中含有?/\等非法字符
解決方法:可以通過正則過濾锌订,如果md5加密竹握,那么一下解決兩個(gè)問題。
雖然有些圖片沒有獲取到辆飘,但是還是爬取了很多啦辐。有興趣的可以嘗試去修改谓传。
關(guān)注公眾號python入門到放棄回復(fù)表情包獲取源碼。
完芹关。