我想知道是否有数量限制start_urls
我可以分配给我的蜘蛛吗?
据我搜索,似乎没有关于列表限制的文档。
目前我已经设置了我的蜘蛛,以便列表start_urls
从 csv 文件中读取。网址数量约为 1,000,000 个。
本身没有限制,但您可能想自己限制它,否则您可能会遇到内存问题。
可能发生的情况是,所有这些 1M 的 url 都将被安排到 scrapy 调度程序,并且由于 python 对象比普通字符串重很多,因此您最终会耗尽内存。
为了避免这种情况,您可以使用以下命令批量处理您的起始网址spider_idle
signal:
class MySpider(Spider):
name = "spider"
urls = []
batch_size = 10000
@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
spider = cls(crawler, *args, **kwargs)
crawler.signals.connect(spider.idle_consume, signals.spider_idle)
return spider
def __init__(self, crawler):
self.crawler = crawler
self.urls = [] # read from file
def start_requests(self):
for i in range(self.batch_size):
url = self.urls.pop(0)
yield Request(url)
def parse(self, response):
pass
# parse
def idle_consume(self):
"""
Everytime spider is about to close check our urls
buffer if we have something left to crawl
"""
reqs = self.start_requests()
if not reqs:
return
logging.info('Consuming batch')
for req in reqs:
self.crawler.engine.schedule(req, self)
raise DontCloseSpider
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)