es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué la CrawlSpider no recolecta enlaces?

Estoy intentando ejecutar mi primer CrawlSpider, pero el programa termina sin errores, mientras que no devuelve nada, termina con cero resultados. ¿Qué está mal con mi código?

from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class FagorelectrodomesticoSpider(CrawlSpider):
    name = 'fagorelectrodomestico.com'
    allowed_domains = ['fagorelectrodomestico.com']
    start_urls = ['https://fagorelectrodomestico.com']

rules = (
    Rule(LinkExtractor(allow='product/'), callback='parse_item', follow=True),
)

def parse_item(self, response):
    for doc in response.css('a.file'):
        doclink = doc.css('::attr("href")').get()
        product = Product()
        product['model'] = response.css('h2.data__symbol::text').get()
        product['brand'] = 'Fagor'
        product['file_urls'] = [doclink]
        yield product
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que las reglas están definidas fuera de la clase de la araña, lo que está causando el problema. Las reglas deben estar dentro de la clase de la araña para que puedan ser ejecutadas correctamente. El código corregido debería verse así:

    from scrapy.spiders import CrawlSpider, Rule
    from scrapy.linkextractors import LinkExtractor
    
    class FagorelectrodomesticoSpider(CrawlSpider):
        name = 'fagorelectrodomestico.com'
        allowed_domains = ['fagorelectrodomestico.com']
        start_urls = ['https://fagorelectrodomestico.com']
    
        rules = (
            Rule(LinkExtractor(allow='product/'), callback='parse_item', follow=True),
        )
    
        def parse_item(self, response):
            for doc in response.css('a.file'):
                doclink = doc.css('::attr("href")').get()
                product = Product()
                product['model'] = response.css('h2.data__symbol::text').get()
                product['brand'] = 'Fagor'
                product['file_urls'] = [doclink]
                yield product
    

    Con este cambio, la araña debería ejecutar correctamente las reglas y devolver resultados.

Comments are closed.