Das folgende ist mein scrapy Code:Wie mit einem sehr großen Attribut "allowed_domains" in Scrapy arbeiten?
def get_host_regex(self, spider):
"""Override this method to implement a different offsite policy"""
allowed_domains = getattr(spider, 'allowed_domains', None)
if not allowed_domains:
return re.compile('') # allow all by default
regex = r'^(.*\.)?(%s)$' % '|'.join(re.escape(d) for d in allowed_domains if d is not None)
return re.compile(regex)
def spider_opened(self, spider):
self.host_regex = self.get_host_regex(spider)
self.domains_seen = set()
Da die allowed_domains sehr groß ist, ist es diese Ausnahme auslöst:
regex = r'^(.*.)?(%s)$' % '|'.join(re.escape(d) for d in allowed_domains if d is not None)
Wie löse ich dieses Problem?
Welche Ausnahme erhalten Sie? Wie lange ist die Domain-Liste? –
flow exception: OverflowError: Die Größe des Code-Limits für reguläre Ausdrücke wurde überschritten, und aus dem Quellcode weiß ich 'regex = r'^(. *.)? (% S) $ '%' | '.join (re.escape (d) für d in allowed_domains, wenn d nicht ist) das Problem verursachen. Ich habe fünfzigtausend Domains – rowele
Müssen Sie wirklich Anfragen nur auf diese 50'000 Domains beschränken, und nichts außerhalb dieser Liste? Sonst wäre es besser, wenn Sie 'allow_domains' nicht definieren, da dies jede Domain erlaubt. –