Pregunta Cómo usar PyCharm para depurar proyectos de Scrapy


Estoy trabajando en Scrapy 0.20 con Python 2.7. Descubrí que PyCharm tiene un buen depurador de Python. Quiero probar mis arañas Scrapy usándolo. ¿Alguien sabe cómo hacer eso, por favor?

 Lo que he intentado

En realidad, traté de ejecutar la araña como un scrip. Como resultado, construí ese scrip. Luego, traté de agregar mi proyecto de Scrapy a PyCharm como un modelo como este:

File->Setting->Project structure->Add content root.

Pero no sé qué más tengo que hacer


74
2018-02-14 20:27


origen


Respuestas:


los scrapy command es una secuencia de comandos python, lo que significa que puedes iniciarla desde PyCharm.

Cuando examina el binario de scrapy (which scrapy) Notarás que esto es en realidad un script de Python:

#!/usr/bin/python

from scrapy.cmdline import execute
execute()

Esto significa que un comando como scrapy crawl IcecatCrawler también se puede ejecutar así: python /Library/Python/2.7/site-packages/scrapy/cmdline.py crawl IcecatCrawler

Intenta encontrar el paquete scrapy.cmdline. En mi caso, la ubicación estaba aquí: /Library/Python/2.7/site-packages/scrapy/cmdline.py

Cree una configuración de ejecución / depuración dentro de PyCharm con ese script como script. Complete los parámetros del script con el comando scrapy y spider. En este caso crawl IcecatCrawler.

Me gusta esto: PyCharm Run/Debug Configuration

Coloque sus puntos de interrupción en cualquier parte de su código de rastreo y debería funcionar.


135
2018-03-07 16:04



Solo necesitas hacer esto.

Cree un archivo de Python en la carpeta de rastreador de su proyecto. Usé main.py.

  • Proyecto
    • Tractor
      • Tractor
        • Arañas
        • ...
      • main.py
      • scrapy.cfg

Dentro de tu main.py coloca este código a continuación.

from scrapy import cmdline    
cmdline.execute("scrapy crawl spider".split())

Y debe crear una "Configuración de ejecución" para ejecutar su main.py.

Al hacer esto, si pones un punto de interrupción en tu código, se detendrá allí.


74
2018-05-04 22:09



Estoy ejecutando scrapy en virtualenv con Python 3.5.0 y estableciendo el parámetro "script" para /path_to_project_env/env/bin/scrapy resuelto el problema para mí.


7
2018-04-15 10:08



Para agregar un bit a la respuesta aceptada, después de casi una hora descubrí que tenía que seleccionar la configuración de ejecución correcta de la lista desplegable (cerca del centro de la barra de herramientas de iconos), luego hacer clic en el botón Depurar para que funcione. ¡Espero que esto ayude!


3
2017-08-09 03:41



idea inteligente Además trabajo.

crear main.py:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#coding=utf-8
import sys
from scrapy import cmdline
def main(name):
    if name:
        cmdline.execute(name.split())



if __name__ == '__main__':
    print('[*] beginning main thread')
    name = "scrapy crawl stack"
    #name = "scrapy crawl spa"
    main(name)
    print('[*] main thread exited')
    print('main stop====================================================')

mostrar a continuación:

enter image description here

enter image description here

enter image description here


3
2017-10-25 15:30



También estoy usando PyCharm, pero no estoy usando sus características de depuración incorporadas.

Para la depuración estoy usando ipdb. Configuré un atajo de teclado para insertar import ipdb; ipdb.set_trace() en cualquier línea, quiero que suceda el punto de quiebre.

Entonces puedo escribir n para ejecutar la siguiente declaración, s para entrar en una función, escriba cualquier nombre de objeto para ver su valor, modifique el entorno de ejecución, escriba c para continuar la ejecución ...

Esto es muy flexible, funciona en entornos distintos a PyCharm, donde no se controla el entorno de ejecución.

Solo escriba su entorno virtual pip install ipdb y lugar import ipdb; ipdb.set_trace() en una línea donde desea que la ejecución se detenga.


2
2018-02-16 16:51



De acuerdo con la documentación https://doc.scrapy.org/en/latest/topics/practices.html

import scrapy
from scrapy.crawler import CrawlerProcess

class MySpider(scrapy.Spider):
    # Your spider definition
    ...

process = CrawlerProcess({
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})

process.crawl(MySpider)
process.start() # the script will block here until the crawling is finished

0
2017-12-19 04:52