摘要:前言這個(gè)文章是延續(xù)之前爬取妹子圖的延續(xù),之前的爬蟲(chóng)可以爬取一個(gè)頁(yè)面的圖片,爬取一次大概張圖片的樣子,按照之前的計(jì)劃,本次要進(jìn)一步完善爬蟲(chóng),爬取妹子圖全網(wǎng)圖片。做完上述改動(dòng)后,爬蟲(chóng)運(yùn)行基本正常,但是爬取的速度有點(diǎn)慢,個(gè)小時(shí)大概爬取了張圖片。
0. 前言
這個(gè)文章是延續(xù)之前《爬取妹子圖 Lv1》的延續(xù),之前的爬蟲(chóng)可以爬取一個(gè)頁(yè)面的圖片,爬取一次大概400張圖片的樣子,按照之前的計(jì)劃,本次要進(jìn)一步完善爬蟲(chóng),爬取妹子圖全網(wǎng)圖片。由于之前已經(jīng)有了爬蟲(chóng)的雛形,所以本篇文章僅對(duì)增改內(nèi)容進(jìn)行說(shuō)明。
系統(tǒng)環(huán)境System Version:Ubuntu 16.04
Python Version:3.5.2
Scrapy Version:1.5.0
from scrapy import Request from scrapy.spiders import Spider from spider_meizitu.items import SpiderMeizituItem import re class MeizituSpider(Spider): name = "meizitu" start_urls = { "http://www.meizitu.com/a/more_1.html", } def parse(self, response): meizi_pic_lists = response.xpath("http://ul[@class="wp-list clearfix"]/li") for i, meizi_item in enumerate(meizi_pic_lists): meizi_item_url = meizi_item.xpath(".//h3[@class="tit"]/a/@href").extract()[0] print("===== 當(dāng)前爬取頁(yè)面共有圖片%s組,正在抓取第%s組圖片,頁(yè)面鏈接:: %s ====="% (len(meizi_pic_lists),i+1,meizi_item_url)) yield Request(meizi_item_url,callback=self.parse_meizi_pic) next_url = re.findall("下一頁(yè)",response.xpath("http://*[@id="wp_page_numbers"]").extract()[0]) print("next_url:::::",next_url) #print("response:::::",response.xpath("http://*[@id="wp_page_numbers"]").extract()[0]) if next_url: next_url = "http://www.meizitu.com/a/" + next_url[0] print("========== Request Next Url :: %s ==========" % next_url ) yield Request(next_url,callback=self.parse) def parse_meizi_pic(self,response): print("========== parse_meizi_pic response::: %s =========="% response) item = SpiderMeizituItem() meizitu_pics = response.xpath("http://div[@id="picture"]/p/img") for i, meizitu_pic in enumerate(meizitu_pics): item["images"] = meizitu_pic.xpath(".//@alt").extract()[0].split(",")[0] item["image_urls"] = meizitu_pic.xpath(".//@src").extract() print("===== 當(dāng)前頁(yè)面共有圖片%s張,正在抓取第%s張圖片,圖片鏈接:: %s ====="% (len(meizitu_pics),i+1,item["image_urls"])) yield item1.2. 增改項(xiàng)目說(shuō)明 1.2.1. import re
為了定位下一頁(yè)的跳轉(zhuǎn)鏈接,所以加入了正則表達(dá)式。
1.2.2. next_urlnext_url = re.findall("下一頁(yè)",response.xpath("http://*[@id="wp_page_numbers"]").extract()[0])
利用正則表達(dá)式來(lái)提取下一頁(yè)的鏈接地址,re.findall的第一個(gè)參數(shù)是正則表達(dá)式,第二個(gè)參數(shù)是要匹配的字符串。利用response.xpath將頁(yè)面中分頁(yè)菜單部分的html代碼提取出來(lái)用于正則匹配,返回的結(jié)果就是下一頁(yè)按鈕中的超鏈接。如果當(dāng)前頁(yè)面是http://www.meizitu.com/a/more_1.html,得到的url就是more_2.html。
接下來(lái)就將得到的next_url 與主鏈接合并成完整鏈接,輸出給parse函數(shù)繼續(xù)處理。
2. settings做完之前的改動(dòng)后,我開(kāi)始爬取頁(yè)面圖片,爬取more_1.html頁(yè)面之后可以正常跳轉(zhuǎn)到more_2.html,之后到more_3.html、more_4.html。但是出現(xiàn)一個(gè)問(wèn)題就是在爬取到后期的時(shí)候,每個(gè)頁(yè)面的39個(gè)項(xiàng)目中只能爬取到最后一個(gè),有時(shí)候一個(gè)也爬不到,最終爬蟲(chóng)運(yùn)行完畢后,我只得到了900+的圖片。由于本人基礎(chǔ)知識(shí)還不夠扎實(shí),只是有兩方面懷疑,一是網(wǎng)站對(duì)請(qǐng)求做了限制,規(guī)定時(shí)間內(nèi)如果請(qǐng)求過(guò)多則爬不到頁(yè)面,二是scrapy的download隊(duì)列有數(shù)量限制,爬取到大概50個(gè)頁(yè)面的時(shí)候,好像隊(duì)列就滿了,無(wú)法再新增項(xiàng)目,只有前面的隊(duì)列完成后,才能有新的項(xiàng)目進(jìn)入隊(duì)列。不論是哪個(gè)原因,我對(duì)setting做了些修改,打開(kāi)或者增加了一些setting設(shè)置,具體如下:
配置Scrapy執(zhí)行的最大并發(fā)請(qǐng)求 默認(rèn)16
CONCURRENT_REQUESTS = 128
設(shè)置下載延遲 默認(rèn) 0
DOWNLOAD_DELAY = 5
禁用cookies
COOKIES_ENABLED = False
日志輸出基本,默認(rèn): "DEBUG",log的最低級(jí)別??蛇x的級(jí)別有: CRITICAL、 ERROR、WARNING、INFO、DEBUG。
LOG_LEVEL = "INFO"
做完上述改動(dòng)后,爬蟲(chóng)運(yùn)行基本正常,但是爬取的速度有點(diǎn)慢,12個(gè)小時(shí)大概爬取了9000張圖片。
3. 后續(xù)有心的朋友能夠看到,在這兩個(gè)爬蟲(chóng)實(shí)例中,我始終沒(méi)有去寫(xiě)pipeline,一直使用scrapy自帶的pipeline模塊。但是默認(rèn)的pipeline模塊下載的圖片名稱不可讀,下一步,我將重寫(xiě)pipeline組件,實(shí)現(xiàn)文件命名和分目錄存儲(chǔ)的功能。
最后,發(fā)一個(gè)我自己理解的這個(gè)爬蟲(chóng)的運(yùn)行流程圖,由于scrapy框架比較大,高端應(yīng)用(如調(diào)度器、規(guī)則等)還沒(méi)有用到,也沒(méi)在這個(gè)圖里體現(xiàn)出來(lái),僅供新手學(xué)習(xí)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41425.html
摘要:爬取妹子圖的實(shí)例打算分成三部分來(lái)寫(xiě),嘗試完善實(shí)用性。中的每一個(gè)子項(xiàng)都是一個(gè)標(biāo)簽。這個(gè)說(shuō)明的前提是不自定義當(dāng)爬蟲(chóng)完成的模型數(shù)據(jù)采集后,會(huì)自動(dòng)將發(fā)送給處理。 0. 前言 這是一個(gè)利用python scrapy框架爬取網(wǎng)站圖片的實(shí)例,本人也是在學(xué)習(xí)當(dāng)中,在這做個(gè)記錄,也希望能幫到需要的人。爬取妹子圖的實(shí)例打算分成三部分來(lái)寫(xiě),嘗試完善實(shí)用性。 系統(tǒng)環(huán)境 System Version:Ubunt...
摘要:很多人學(xué)習(xí)爬蟲(chóng)的第一驅(qū)動(dòng)力就是爬取各大網(wǎng)站的妹子圖片,比如比較有名的。最后我們只需要運(yùn)行程序,即可執(zhí)行爬取,程序運(yùn)行命名如下完整代碼我已上傳到微信公眾號(hào)后臺(tái),在癡海公眾號(hào)后臺(tái)回復(fù)即可獲取。本文首發(fā)于公眾號(hào)癡海,后臺(tái)回復(fù)即可獲取最新編程資源。 showImg(https://segmentfault.com/img/remote/1460000016780800); 閱讀文本大概需要 1...
摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:學(xué)習(xí)網(wǎng)站爬蟲(chóng),整站爬取妹子圖定義爬取的內(nèi)容的編寫(xiě)提供了一種便捷的方式填充抓取到的是頁(yè)面源代碼,載入每個(gè)連接,用屬性請(qǐng)求連接,返回請(qǐng)求獲取頁(yè)碼集合打印頁(yè)碼如果頁(yè)碼集合圖片連接讀取頁(yè)碼集合的倒數(shù)第二個(gè)頁(yè)碼圖片連接替換成空返回請(qǐng)求用載 學(xué)習(xí)網(wǎng)站:爬蟲(chóng),整站爬取妹子圖 1.item.py(定義爬取的內(nèi)容) import scrapy class MeizituItem(scrapy.Ite...
摘要:爬取百思不得姐首先一步一步來(lái),我們先從爬最簡(jiǎn)單的文本開(kāi)始。將百思不得姐段子保存到中別忘了將管道加到配置文件中。雖然我只是簡(jiǎn)單的爬了百思不得姐,不過(guò)這些方法可以應(yīng)用到其他方面,爬取更多更有用的數(shù)據(jù)。 前一篇文章介紹了很多關(guān)于scrapy的進(jìn)階知識(shí),不過(guò)說(shuō)歸說(shuō),只有在實(shí)際應(yīng)用中才能真正用到這些知識(shí)。所以這篇文章就來(lái)嘗試?yán)胹crapy爬取各種網(wǎng)站的數(shù)據(jù)。 爬取百思不得姐 首先一步一步來(lái),我...
閱讀 1468·2021-11-25 09:43
閱讀 2606·2021-09-24 10:30
閱讀 3675·2021-09-06 15:02
閱讀 3613·2019-08-30 15:55
閱讀 3312·2019-08-30 15:53
閱讀 1707·2019-08-30 15:52
閱讀 2153·2019-08-30 14:21
閱讀 2022·2019-08-30 13:55