Ich versuche, eine Spinne mit dem Paket "Scrapy" zu erstellen, das eine Liste von URLs erhält und sie kriecht. Ich habe stackoverflow für eine Antwort gesucht, konnte aber nichts finden, das das Problem lösen würde.Python - Scrapy - Erstellen eines Crawlers, der eine Liste von URLs erhält und sie crawlt
Mein Skript ist wie folgt:
class Try(scrapy.Spider):
name = "Try"
def __init__(self, *args, **kwargs):
super(Try, self).__init__(*args, **kwargs)
self.start_urls = kwargs.get("urls")
print(self.start_urls)
def start_requests(self):
print(self.start_urls)
for url in self.start_urls:
yield Request(url , self.parse)
def parse(self, response):
d = response.xpath("//body").extract()
Wenn ich die Spinne krabbeln:
Spider = Try(urls = [r"https://www.example.com"])
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})
process.crawl(Spider)
process.start()
ich folgende Info beim Drucken self.start_urls-Motiven bedruckt sind:
- In der __init__ Funktion auf dem Bildschirm gedruckt ist: [r "https://www.example.com "] (wie an die Spinne weitergegeben).
- Im start_requests Funktion auf dem Bildschirm gedruckt ist: Keine
Warum ich keine bekommen? Gibt es eine andere Möglichkeit, dieses Problem anzugehen? oder Gibt es Fehler in meiner Spinnenklasse?
Danke für jede Hilfe!
Verwenden Sie einen anderen Namen für die Liste, um URLs beim Start zu behalten - 'self.start_urls' wird von' scrapy' verwendet, um sie zu entfernen. Ich frage mich, ob du URLs in "self.start_urls" in "__init__" steckst, dann benutzt es sie vielleicht und du brauchst 'start_requests' nicht? – furas
'process.crawl' erstellt ein neues Try-Objekt ohne Parameter beim Aufruf von' from_crawler'. Siehe Crawler-Klasse im Scrapy-Quellcode. https://github.com/scrapy/scrapy/blob/master/scrapy/crawler.py#L101-L102 – matiskay