从蜘蛛(Scrapy)无法获取网址
问题描述:
我想要获取的网址数量在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
你知道如何获得数字吗?
答
您可以在下面使用。
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可能会延迟开始
这会计算sitemap_urls的长度。我想获取Sitemap中找到的网址数量。可能吗? –
这是可能的,但不是直截了当的。问题是您需要下载所有这些网站地图网址,然后由您的班级中的_parse_sitemap进行处理。所以这是可能的,但体面的修改。您需要为'start_requests'方法中的每个url创建一个响应对象,然后通过'_parse_sitemap'传递它们并从这些生成器中获取列表。 –