5 Stimmen

Scrapy erlauben alle Subdomains.

Ich möchte Scrapy verwenden, um eine Website zu durchsuchen, deren Seiten in viele Subdomains unterteilt sind. Ich weiß, dass ich einen CrawlSpider mit einer Rule brauche, aber die Rule soll einfach "alle Subdomains zulassen und die Parser selbst entsprechend den Daten bearbeiten lassen" (was bedeutet - im Beispiel sind die item_links in verschiedenen Subdomains)

Beispiel für den Code:

def parse_page(self, response):
    sel = Selector(response)
    item_links = sel.xpath("XXXXXXXXX").extract()
    for item_link in item_links:
            item_request = Request(url=item_link,
                                     callback=self.parse_item)
            yield item_request

def parse_item(self, response):
    sel = Selector(response)

** BEARBEITEN ** Um die Frage klarzustellen, möchte ich die Möglichkeit haben, alle *.example.com zu durchsuchen -> was bedeutet, dass keine Filtered offsite request to 'foo.example.com' erhalten werden sollen

** NOCH EIN BEARBEITEN ** Folgen Sie der Antwort von @agstudy und vergessen Sie nicht, allowed_domains = ["www.example.com"] zu löschen

5voto

bartaelterman Punkte 719

Wenn Sie keine Regeln verwenden, sondern die allowed_domains-Klassenattribut des Spiders verwenden, können Sie auch allowed_domains = ['example.com'] setzen. Das wird alle Subdomains von example.com wie foo.example.com erlauben.

4voto

agstudy Punkte 116600

Sie können für die Regel eine allow_domains-Liste festlegen:

rules = (
       Rule(SgmlLinkExtractor(allow_domains=('domain1','domain2' ), ),)

Zum Beispiel:

rules = (
       Rule(SgmlLinkExtractor(allow_domains=('example.com','example1.com' ), ),)

Dies filtert erlaubte URLs wie:

www.example.com/blaa/bla/
www.example1.com/blaa/bla/
www.something.example.com/blaa/bla/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X