Ich bin neu in Scrapy und versuche, mehrere Sites aus einer Textdatei mit CrawlSpider zu crawlen. Allerdings möchte ich die Tiefe des Scraping per Website und auch die Gesamtzahl der gecrawlten Seiten wieder per Website begrenzen. Leider, wenn die Attribute start_urls und allowed_domains gesetzt sind, scheint die response.meta ['depth'] immer Null zu sein (das passiert nicht, wenn ich versuche, einzelne Sites zu scrappen). Das Einstellen der DEPTH_LIMIT in der Einstellungsdatei scheint überhaupt nichts zu tun. Wenn ich die init Definition entfernen und einfach die start_urls und allowed_domains Dinge scheinen gut zu funktionieren. Hier ist der Code (Sorry für die Einbuchtung - das ist nicht das Thema):Crawlen mehrerer Sites mit Python Scrapy mit begrenzter Tiefe pro Site
class DownloadSpider(CrawlSpider):
name = 'downloader'
rules = (
Rule(SgmlLinkExtractor(), callback='parse_item', follow=True),
)
def __init__(self, urls_file, N=10):
data = open(urls_file, 'r').readlines()[:N]
self.allowed_domains = [urlparse(i).hostname.strip() for i in data]
self.start_urls = ['http://' + domain for domain in self.allowed_domains]
def parse_start_url(self, response):
return self.parse_item(response)
def parse_item(self, response):
print response.url
print response.meta['depth']
Dies führt zu response.meta [ ‚Tiefe‘] immer gleich Null und die cralwer kriecht nur die erste Seite von jedem Element von start_urls (dh es folgt keine Links). So habe ich zwei Fragen 1) Wie das Crawling zu einer bestimmten Tiefe zu begrenzen pro jeder Standort in start_urls 2) Wie die Gesamtzahl der Crawls pro Seite zu begrenzen, unabhängig von den Tiefen
Dank!
Es scheint, dass das Problem in dem Teil, wo Sie Argumente an die Spinne passieren. Wenn dies entfernt wird, funktioniert der Crawler problemlos mit der Einstellung DEPTH_LIMIT. Dies macht es jedoch sehr ineffizient, es einem wechselnden Satz von Seiten zuzuführen, um zu krabbeln – gpanterov