2012-10-08 20 views
8

Estoy siguiendo la documentación del tutorial de Scrapy al http://media.readthedocs.org/pdf/scrapy/0.14/scrapy.pdf y he verificado que items.py y dmoz_spider.py están escritos (no cortados & pegados) correctamente.Excepciones del tutorial de Scrapy

El primer "hmmm ..." para mí era esta instrucción:

Este es el código para nuestra primera araña; guardarlo en un archivo llamado dmoz_spider.py en el directorio dmoz/arañas

Estoy usando la última versión de Ubuntu y no había una carpeta dmoz creado, por lo que he puesto este código en ~/tutorial/tutorial/arañas. (¿Era esta mi primer error?)

Así que aquí está mi script dmoz_spider.py:

from scrapy.spider import BaseSpider 

class DmozSpider(BaseSpider): 
    name = "dmoz" 
    allowed_domains = ["dmoz.org"] 
    start_urls = [ 
    "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", 
    "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" 
    ] 

def parse(self, response): 
    filename = response.url.split("/")[-2] 
    open(filename, 'wb').write(response.body) 

En mi terminal de tipo I

scrapy crawl dmoz 

y me sale esto:

2012-10-08 13:20:22-0700 [scrapy] INFO: Scrapy 0.12.0.2546 started (bot: tutorial) 
2012-10-08 13:20:22-0700 [scrapy] DEBUG: Enabled extensions: TelnetConsole, SpiderContext, WebService, CoreStats, MemoryUsage, CloseSpider 
2012-10-08 13:20:22-0700 [scrapy] DEBUG: Enabled scheduler middlewares: DuplicatesFilterMiddleware 
2012-10-08 13:20:22-0700 [scrapy] DEBUG: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, RedirectMiddleware, CookiesMiddleware, HttpCompressionMiddleware, DownloaderStats 
2012-10-08 13:20:22-0700 [scrapy] DEBUG: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware 
2012-10-08 13:20:22-0700 [scrapy] DEBUG: Enabled item pipelines: 
2012-10-08 13:20:22-0700 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6023 
2012-10-08 13:20:22-0700 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080 
2012-10-08 13:20:22-0700 [dmoz] INFO: Spider opened 
2012-10-08 13:20:22-0700 [dmoz] DEBUG: Crawled (200) <GET http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/> (referer: None) 
2012-10-08 13:20:22-0700 [dmoz] ERROR: Spider error processing <http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/> (referer: <None>) 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1178, in mainLoop 
    self.runUntilCurrent() 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 800, in runUntilCurrent 
    call.func(*call.args, **call.kw) 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 362, in callback 
    self._startRunCallbacks(result) 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 458, in _startRunCallbacks 
    self._runCallbacks() 
--- <exception caught here> --- 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 545, in _runCallbacks 
    current.result = callback(current.result, *args, **kw) 
    File "/usr/lib/python2.7/dist-packages/scrapy/spider.py", line 62, in parse 
    raise NotImplementedError 
exceptions.NotImplementedError: 

2012-10-08 13:20:22-0700 [dmoz] DEBUG: Crawled (200) <GET http://www.dmoz.org/Computers/Programming/Languages/Python/Books/> (referer: None) 
2012-10-08 13:20:22-0700 [dmoz] ERROR: Spider error processing <http://www.dmoz.org/Computers/Programming/Languages/Python/Books/> (referer: <None>) 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1178, in mainLoop 
    self.runUntilCurrent() 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 800, in runUntilCurrent 
    call.func(*call.args, **call.kw) 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 362, in callback 
    self._startRunCallbacks(result) 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 458, in _startRunCallbacks 
    self._runCallbacks() 
--- <exception caught here> --- 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 545, in _runCallbacks 
    current.result = callback(current.result, *args, **kw) 
    File "/usr/lib/python2.7/dist-packages/scrapy/spider.py", line 62, in parse 
    raise NotImplementedError 
exceptions.NotImplementedError: 

2012-10-08 13:20:22-0700 [dmoz] INFO: Closing spider (finished) 
2012-10-08 13:20:22-0700 [dmoz] INFO: Spider closed (finished) 

En mi búsqueda, vi que alguien más había dicho que twisted probablemente no estaba instalado ... pero ¿no lo instalaría si usara el Instalador de paquetes Ubuntu para Scrapy?

¡Gracias de antemano!

+0

¿Por qué no comprobar primero si está realmente instalado? No confíes en tu conjetura :) – Alfabravo

Respuesta

15

El método de análisis en BaseSpider se está llamando en lugar de su uno porque no ha reemplazado correctamente el método de análisis. Su sangría es incorrecta, por lo que el análisis se declara como una función fuera de la clase DmozSpider. Bienvenido a Python :)

No tiene nada que ver con retorcido, puedo ver que está retorcido en las trazas, por lo que está claramente instalado.

+1

Ah, eso fue todo. ¡Gracias! Después de sangrar la línea "def analizar", ¡todo funcionó bien! Bienvenido a Python de hecho. :) – user1729889

+0

Gracias Shane desde 2015 ~ –