Also ich versuche CrawlSpider und zu verstehen, das folgende Beispiel in der Scrapy Docs zu verwenden: istScrapy - Verständnis CrawlSpider und LinkExtractor
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class MySpider(CrawlSpider):
name = 'example.com'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com']
rules = (
# Extract links matching 'category.php' (but not matching 'subsection.php')
# and follow links from them (since no callback means follow=True by default).
Rule(LinkExtractor(allow=('category\.php',), deny=('subsection\.php',))),
# Extract links matching 'item.php' and parse them with the spider's method parse_item
Rule(LinkExtractor(allow=('item\.php',)), callback='parse_item'),
)
def parse_item(self, response):
self.logger.info('Hi, this is an item page! %s', response.url)
item = scrapy.Item()
item['id'] = response.xpath('//td[@id="item_id"]/text()').re(r'ID: (\d+)')
item['name'] = response.xpath('//td[@id="item_name"]/text()').extract()
item['description'] = response.xpath('//td[@id="item_description"]/text()').extract()
return item
Die Beschreibung dann gegeben:
würde Diese Spinne beginnen kriechen die Homepage von example.com, sammelt Kategorie- und Elementverknüpfungen und analysiert diese mit der Methode parse_item. Für jede Item-Antwort werden einige Daten mit XPath aus dem HTML-Code extrahiert, und ein Item wird damit gefüllt.
Ich verstehe, dass für die zweite Regel, extrahiert sie Verbindungen von item.php
und extrahiert dann die Informationen, um die parse_item
Methode. Was genau ist der Zweck der ersten Regel? Es sagt nur, dass es die Links "sammelt". Was bedeutet das und warum ist es nützlich, wenn sie keine Daten daraus extrahieren?
Ah, ich sehe ... also würde diese Spinne Daten von Links wie 'example.com/category.php/item.php' extrahieren, aber nicht von irgendwelchen Links wie' example.com/subsection. php/item.php'? – ocean800
Ja, wenn Sie meinen, dass zum Extrahieren von 'example.com/subsection.php/item.php' zuerst die Seite' example.com/subsection.php' aufgerufen werden muss. Nehmen wir an, Sie befinden sich auf 'example.com' (Startseite) und innerhalb dieser Seite hat sie nur zwei Links (innerhalb des Körpers):' example.com/category.php' und 'example.com/subsection.php', und Wenn Sie sie besuchen, finden Sie Produkt-URLs (mit 'item.php'). Dann wird die Spinne nur diejenigen in 'category.php' extrahieren, weil sie' subsection.php' NIE besucht hat. – eLRuLL
Ich sehe ... danke! Wenn es also einen dritten Link gibt, example.com/third.php/item.php, aber ich hatte die gleiche Regel wie oben, würde es diese Links analysieren? Nur verwirrt über das Verhalten, weil 'third.php' weder in' allow =() 'noch' deny =() 'wäre. Müssen Sie alle möglichen zusätzlichen Links manuell ablehnen? – ocean800