摘要:前言這個文章是延續之前爬取妹子圖的延續,之前的爬蟲可以爬取一個頁面的圖片,爬取一次大概張圖片的樣子,按照之前的計劃,本次要進一步完善爬蟲,爬取妹子圖全網圖片。做完上述改動后,爬蟲運行基本正常,但是爬取的速度有點慢,個小時大概爬取了張圖片。
0. 前言
這個文章是延續之前《爬取妹子圖 Lv1》的延續,之前的爬蟲可以爬取一個頁面的圖片,爬取一次大概400張圖片的樣子,按照之前的計劃,本次要進一步完善爬蟲,爬取妹子圖全網圖片。由于之前已經有了爬蟲的雛形,所以本篇文章僅對增改內容進行說明。
系統環境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("===== 當前爬取頁面共有圖片%s組,正在抓取第%s組圖片,頁面鏈接:: %s ====="% (len(meizi_pic_lists),i+1,meizi_item_url))
yield Request(meizi_item_url,callback=self.parse_meizi_pic)
next_url = re.findall("下一頁",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("===== 當前頁面共有圖片%s張,正在抓取第%s張圖片,圖片鏈接:: %s ====="% (len(meizitu_pics),i+1,item["image_urls"]))
yield item
1.2. 增改項目說明
1.2.1. import re
為了定位下一頁的跳轉鏈接,所以加入了正則表達式。
1.2.2. next_url</>復制代碼
next_url = re.findall("下一頁",response.xpath("http://*[@id="wp_page_numbers"]").extract()[0])
利用正則表達式來提取下一頁的鏈接地址,re.findall的第一個參數是正則表達式,第二個參數是要匹配的字符串。利用response.xpath將頁面中分頁菜單部分的html代碼提取出來用于正則匹配,返回的結果就是下一頁按鈕中的超鏈接。如果當前頁面是http://www.meizitu.com/a/more_1.html,得到的url就是more_2.html。
接下來就將得到的next_url 與主鏈接合并成完整鏈接,輸出給parse函數繼續處理。
2. settings做完之前的改動后,我開始爬取頁面圖片,爬取more_1.html頁面之后可以正常跳轉到more_2.html,之后到more_3.html、more_4.html。但是出現一個問題就是在爬取到后期的時候,每個頁面的39個項目中只能爬取到最后一個,有時候一個也爬不到,最終爬蟲運行完畢后,我只得到了900+的圖片。由于本人基礎知識還不夠扎實,只是有兩方面懷疑,一是網站對請求做了限制,規定時間內如果請求過多則爬不到頁面,二是scrapy的download隊列有數量限制,爬取到大概50個頁面的時候,好像隊列就滿了,無法再新增項目,只有前面的隊列完成后,才能有新的項目進入隊列。不論是哪個原因,我對setting做了些修改,打開或者增加了一些setting設置,具體如下:
</>復制代碼
配置Scrapy執行的最大并發請求 默認16
CONCURRENT_REQUESTS = 128
</>復制代碼
設置下載延遲 默認 0
DOWNLOAD_DELAY = 5
</>復制代碼
禁用cookies
COOKIES_ENABLED = False
</>復制代碼
日志輸出基本,默認: "DEBUG",log的最低級別。可選的級別有: CRITICAL、 ERROR、WARNING、INFO、DEBUG。
LOG_LEVEL = "INFO"
做完上述改動后,爬蟲運行基本正常,但是爬取的速度有點慢,12個小時大概爬取了9000張圖片。
3. 后續有心的朋友能夠看到,在這兩個爬蟲實例中,我始終沒有去寫pipeline,一直使用scrapy自帶的pipeline模塊。但是默認的pipeline模塊下載的圖片名稱不可讀,下一步,我將重寫pipeline組件,實現文件命名和分目錄存儲的功能。
最后,發一個我自己理解的這個爬蟲的運行流程圖,由于scrapy框架比較大,高端應用(如調度器、規則等)還沒有用到,也沒在這個圖里體現出來,僅供新手學習。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41425.html
摘要:爬取妹子圖的實例打算分成三部分來寫,嘗試完善實用性。中的每一個子項都是一個標簽。這個說明的前提是不自定義當爬蟲完成的模型數據采集后,會自動將發送給處理。 0. 前言 這是一個利用python scrapy框架爬取網站圖片的實例,本人也是在學習當中,在這做個記錄,也希望能幫到需要的人。爬取妹子圖的實例打算分成三部分來寫,嘗試完善實用性。 系統環境 System Version:Ubunt...
摘要:很多人學習爬蟲的第一驅動力就是爬取各大網站的妹子圖片,比如比較有名的。最后我們只需要運行程序,即可執行爬取,程序運行命名如下完整代碼我已上傳到微信公眾號后臺,在癡海公眾號后臺回復即可獲取。本文首發于公眾號癡海,后臺回復即可獲取最新編程資源。 showImg(https://segmentfault.com/img/remote/1460000016780800); 閱讀文本大概需要 1...
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:學習網站爬蟲,整站爬取妹子圖定義爬取的內容的編寫提供了一種便捷的方式填充抓取到的是頁面源代碼,載入每個連接,用屬性請求連接,返回請求獲取頁碼集合打印頁碼如果頁碼集合圖片連接讀取頁碼集合的倒數第二個頁碼圖片連接替換成空返回請求用載 學習網站:爬蟲,整站爬取妹子圖 1.item.py(定義爬取的內容) import scrapy class MeizituItem(scrapy.Ite...
摘要:爬取百思不得姐首先一步一步來,我們先從爬最簡單的文本開始。將百思不得姐段子保存到中別忘了將管道加到配置文件中。雖然我只是簡單的爬了百思不得姐,不過這些方法可以應用到其他方面,爬取更多更有用的數據。 前一篇文章介紹了很多關于scrapy的進階知識,不過說歸說,只有在實際應用中才能真正用到這些知識。所以這篇文章就來嘗試利用scrapy爬取各種網站的數據。 爬取百思不得姐 首先一步一步來,我...
閱讀 1451·2021-11-25 09:43
閱讀 2591·2021-09-24 10:30
閱讀 3666·2021-09-06 15:02
閱讀 3604·2019-08-30 15:55
閱讀 3306·2019-08-30 15:53
閱讀 1701·2019-08-30 15:52
閱讀 2148·2019-08-30 14:21
閱讀 2014·2019-08-30 13:55