spider scraping follow español ejemplos desde create cero python web-crawler scrapy

python - scraping - scrapy spider



Scrapy-logueando el archivo y la salida estándar simultáneamente, con nombres de arañas (6)

Decidí usar el módulo de registro de Python porque los mensajes generados por Twisted on std error son demasiado largos, y quiero INFO mensajes significativos como los generados por StatsCollector para escribir en un archivo de registro separado mientras mantengo el mensajes de pantalla.

from twisted.python import log import logging logging.basicConfig(level=logging.INFO, filemode=''w'', filename=''buyerlog.txt'') observer = log.PythonLoggingObserver() observer.start()

Bueno, esto está bien, tengo mis mensajes, ¡pero la desventaja es que no sé qué mensajes son generados por qué araña! Este es mi archivo de registro, con "trenzado" mostrado por %(name)s :

INFO:twisted:Log opened. 2 INFO:twisted:Scrapy 0.12.0.2543 started (bot: property) 3 INFO:twisted:scrapy.telnet.TelnetConsole starting on 6023 4 INFO:twisted:scrapy.webservice.WebService starting on 6080 5 INFO:twisted:Spider opened 6 INFO:twisted:Spider opened 7 INFO:twisted:Received SIGINT, shutting down gracefully. Send again to force unclean shutdown 8 INFO:twisted:Closing spider (shutdown) 9 INFO:twisted:Closing spider (shutdown) 10 INFO:twisted:Dumping spider stats: 11 {''downloader/exception_count'': 3, 12 ''downloader/exception_type_count/scrapy.exceptions.IgnoreRequest'': 3, 13 ''downloader/request_bytes'': 9973,

En comparación con los mensajes generados a partir de torcido en error estándar:

2011-12-16 17:34:56+0800 [expats] DEBUG: number of rules: 4 2011-12-16 17:34:56+0800 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6023 2011-12-16 17:34:56+0800 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080 2011-12-16 17:34:56+0800 [iproperty] INFO: Spider opened 2011-12-16 17:34:56+0800 [iproperty] DEBUG: Redirecting (301) to <GET http://www.iproperty.com.sg/> from <GET http://iproperty.com.sg> 2011-12-16 17:34:57+0800 [iproperty] DEBUG: Crawled (200) <

He intentado% (name) s,% (module) s entre otros, pero parece que no puedo mostrar el nombre de la araña. ¿Alguien sabe la respuesta?

EDITAR: el problema con el uso de LOG_FILE y LOG_LEVEL en la configuración es que los mensajes de nivel inferior no se mostrarán en el error estándar.


Como dijo el Scrapy Official Doc:

Scrapy usa el sistema de registro incorporado de Python para el registro de eventos.

Por lo tanto, puede configurar su registrador solo como un script de Python normal.

Primero, tienes que importar el módulo de registro:

import logging

Puedes agregar esta línea a tu araña:

logging.getLogger().addHandler(logging.StreamHandler())

Agrega un controlador de flujo para iniciar sesión en la consola.

Después de eso, tienes que configurar la ruta del archivo de registro.

Agregue un dict llamado custom_settings que consiste en sus configuraciones especificadas por la araña:

custom_settings = { ''LOG_FILE'': ''my_log.log'', ''LOG_LEVEL'': ''INFO'', ... # you can add more settings }

Toda la clase se ve como:

import logging class AbcSpider(scrapy.Spider): name: str = ''abc_spider'' start_urls = [''you_url''] custom_settings = { ''LOG_FILE'': ''my_log.log'', ''LOG_LEVEL'': ''INFO'', ... # you can add more settings } logging.getLogger().addHandler(logging.StreamHandler()) def parse(self, response): pass


Desea utilizar el ScrapyFileLogObserver .

import logging from scrapy.log import ScrapyFileLogObserver logfile = open(''testlog.log'', ''w'') log_observer = ScrapyFileLogObserver(logfile, level=logging.DEBUG) log_observer.start()

Me alegra que hayas hecho esta pregunta, he querido hacer esto yo mismo.


Es muy fácil redirigir la salida usando: scrapy some-scrapy''s-args 2>&1 | tee -a logname scrapy some-scrapy''s-args 2>&1 | tee -a logname

De esta manera, todo lo que salga en forma de código en stdout y stderr, será redirigido a un archivo de nombre de registro y también, será publicado en la pantalla.


Para todas aquellas personas que vinieron aquí antes de leer la versión actual de la documentation :

import logging from scrapy.utils.log import configure_logging configure_logging(install_root_handler=False) logging.basicConfig( filename=''log.txt'', filemode = ''a'', format=''%(levelname)s: %(message)s'', level=logging.DEBUG )


Sé que esto es antiguo pero fue una publicación muy útil ya que la clase aún no está documentada adecuadamente en los documentos de Scrapy. Además, podemos omitir la importación de registros y usar registros desechables directamente. ¡Gracias a todos!

from scrapy import log logfile = open(''testlog.log'', ''a'') log_observer = log.ScrapyFileLogObserver(logfile, level=log.DEBUG) log_observer.start()


ScrapyFileLogObserver ya no es compatible. Puede utilizar el módulo de registro de python estándar.

import logging logging.getLogger().addHandler(logging.StreamHandler())