Pregunta ¿Por qué scrapy arroja un error para mí cuando intento arañar y analizar un sitio?


El siguiente código

class SiteSpider(BaseSpider):
    name = "some_site.com"
    allowed_domains = ["some_site.com"]
    start_urls = [
        "some_site.com/something/another/PRODUCT-CATEGORY1_10652_-1__85667",
    ]
    rules = (
        Rule(SgmlLinkExtractor(allow=('some_site.com/something/another/PRODUCT-CATEGORY_(.*)', ))),

        # Extract links matching 'item.php' and parse them with the spider's method parse_item
        Rule(SgmlLinkExtractor(allow=('some_site.com/something/another/PRODUCT-DETAIL(.*)', )), callback="parse_item"),
    )
    def parse_item(self, response):
.... parse stuff

Lanza el siguiente error

Traceback (most recent call last):
  File "/usr/lib/python2.6/dist-packages/twisted/internet/base.py", line 1174, in mainLoop
    self.runUntilCurrent()
  File "/usr/lib/python2.6/dist-packages/twisted/internet/base.py", line 796, in runUntilCurrent
    call.func(*call.args, **call.kw)
  File "/usr/lib/python2.6/dist-packages/twisted/internet/defer.py", line 318, in callback
    self._startRunCallbacks(result)
  File "/usr/lib/python2.6/dist-packages/twisted/internet/defer.py", line 424, in _startRunCallbacks
    self._runCallbacks()
--- <exception caught here> ---
  File "/usr/lib/python2.6/dist-packages/twisted/internet/defer.py", line 441, in _runCallbacks
    self.result = callback(self.result, *args, **kw)
  File "/usr/lib/pymodules/python2.6/scrapy/spider.py", line 62, in parse
    raise NotImplementedError
exceptions.NotImplementedError: 

Cuando cambio la devolución de llamada para "analizar" y la función para "analizar" no obtengo ningún error, pero no se elimina nada. Lo cambié a "parse_items" pensando que podría estar anulando el analizar el método por accidente. Tal vez estoy configurando el extractor de enlaces mal?

Lo que quiero hacer es analizar cada enlace ITEM en la página CATEGORÍA. ¿Estoy haciendo esto totalmente mal?


6
2018-03-10 19:31


origen


Respuestas:


Necesitaba cambiar BaseSpider a CrawlSpider. Gracias usuarios de terapia!

http://groups.google.com/group/scrapy-users/browse_thread/thread/4adaba51f7bcd0af#

Hola Bob,

Quizás podría funcionar si cambias   de BaseSpider a CrawlSpider? los   BaseSpider parece no implementar Rule,   ver:

http://doc.scrapy.org/topics/spiders.html?highlight=rule#scrapy.contr...

-METRO


9
2018-03-11 16:55



Por defecto scrapy busca la función de análisis en la clase. Aquí en tu araña, falta la función de análisis. En lugar de analizar, has dado parse_item. El problema se resolverá si parse_item se reemplaza con el análisis. O puede anular el método de análisis en spider.py con el de parse_item.


4
2018-01-31 06:01