2017-10-21 175 views
0

我想要獲取的網址數量在SitemapSpider之間。我試圖覆蓋start_requests方法,但它打印0.我有一個sitemap_url其中包含數千個網址。我想得到這些網址的數量。從蜘蛛(Scrapy)無法獲取網址

這是我嘗試過的,但我想從站點地圖的Url不在start_urls。

class MainSpider(SitemapSpider): 
    name = 'main_spider' 
    allowed_domains = ['...'] 
    sitemap_urls = ['http://.../sitemap.xml'] 

    def start_requests(self): 
     r = super(MainSpider, self).start_requests() 
     self.urls_count = len(self.start_urls) 
     print self.urls_count 
     return r 

你知道如何獲得數字嗎?

回答

0

您可以在下面使用。

class MainSpider(SitemapSpider): 
    name = 'main_spider' 
    allowed_domains = ['...'] 
    sitemap_urls = ['http://.../sitemap.xml'] 

    def start_requests(self): 
     r = super(MainSpider, self).start_requests() 
     r_list = list(r) 
     print len(r_list) 
     return r_list 

super(MainSpider, self).start_requests()返回一個發電機和列表將確保你做出完整的產量。但是,如果站點地圖很大,這會降低你的刮板啓動速度。實際的scrapy可能會延遲開始

+0

這會計算sitemap_urls的長度。我想獲取Sitemap中找到的網址數量。可能嗎? –

+1

這是可能的,但不是直截了當的。問題是您需要下載所有這些網站地圖網址,然後由您的班級中的_parse_sitemap進行處理。所以這是可能的,但體面的修改。您需要爲'start_requests'方法中的每個url創建一個響應對象,然後通過'_parse_sitemap'傳遞它們並從這些生成器中獲取列表。 –