2017-10-21 259 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'传递它们并从这些生成器中获取列表。 –