Ich versuche eine Spinne zu bauen, die durch 3 Seiten folgt, bevor Sie zu der Seite gelangen, die sie kratzt. Ich habe die Antworten in der Shell getestet, aber zusammen scheint es nicht zu funktionieren und ich bin mir nicht sicher warum.Spider nicht folgenden Links - scrapy
Mein Code unten:
# -*- coding: utf-8 -*-
import scrapy
class CollegiateSpider(scrapy.Spider):
name = 'Collegiate'
allowed_domains = ['collegiate-ac.com/uk-student-accommodation']
start_urls = ['http://collegiate-ac.com/uk-student-accommodation/']
# Step 1 - Get the area links
def parse(self, response):
for city in response.xpath('//*[@id="top"]/div[1]/div/div[1]/div/ul/li/a/text').extract():
yield scrapy.Request(response.urljoin("/" + city), callback = self.parse_area_page)
# Step 2 - Get the block links
def parse_area_page(self, response):
for url in response.xpath('//div[3]/div/div/div/a/@href').extract():
yield scrapy.Request(response.urljoin(url), callback=self.parse_unitpage)
# Step 3 Get the room links
def parse_unitpage(self, response):
for url in response.xpath('//*[@id="subnav"]/div/div[2]/ul/li[5]/a/@href').extract():
yield scrapy.Request(response.urljoin(final), callback=self.parse_final)
# Step 4 - Scrape the data
def parse_final(self, response):
pass
Ich habe versucht, Crawlspider
nach this answer ändern, aber das scheint nicht zu helfen.
Ich bin derzeit in die Suche, wie Spinnen zu debuggen, jedoch, damit zu kämpfen, so dachte, es wäre von Vorteil, Meinungen auch hier zu erhalten.
vielleicht verwenden 'print()' in Funktionen zu sehen, die man nicht ausgeführt wird. Vielleicht hilft es, ein Problem zu finden. Sie können auch 'response.urljoin()' anzeigen, um zu sehen, ob Sie korrekte URLs erstellen. – furas
Warum verwenden Sie 'final' in' response.urljoin (final) 'in' parse_unitpage', wenn Sie diese Variable nicht haben? Hast du keine Fehlermeldung erhalten? – furas
'xpath()' in 'parse()' gibt keine Ergebnisse. Können Sie nicht Klassennamen anstelle von 'div/div/div /' verwenden? – furas