Je travaille sur Scrapy 0.20 avec Python 2.7. J'ai trouvé que PyCharm avait un bon Python. Je souhaite tester mes araignées Scrapy. Tout le monde sait comment faire ça s'il vous plait?
En fait, j'ai essayé d'utiliser l'araignée comme script. En conséquence, j'ai construit ce script. Ensuite, j'ai essayé d'ajouter mon projet Scrapy à PyCharm en tant que modèle comme celui-ci:
File->Setting->Project structure->Add content root.
Mais je ne sais pas quoi d'autre je dois faire
La commande scrapy
est un script python qui signifie que vous pouvez le démarrer à partir de PyCharm.
Lorsque vous examinez le binaire scrapy (which scrapy
) vous remarquerez qu’il s’agit d’un script python:
#!/usr/bin/python
from scrapy.cmdline import execute
execute()
Cela signifie qu'une commande comme scrapy crawl IcecatCrawler
peut également être exécuté comme ceci: python /Library/Python/2.7/site-packages/scrapy/cmdline.py crawl IcecatCrawler
Essayez de trouver le paquet scrapy.cmdline. Dans mon cas, le lieu était ici: /Library/Python/2.7/site-packages/scrapy/cmdline.py
Créez une configuration d'exécution/de débogage dans PyCharm avec ce script en tant que script. Remplissez les paramètres du script avec la commande scrapy et l'araignée. Dans ce cas crawl IcecatCrawler
.
Comme ça:
Placez vos points d'arrêt n'importe où dans votre code d'analyse et cela devrait fonctionner ™.
Vous avez juste besoin de faire ça.
Créez un fichier Python dans le dossier du robot d'exploration de votre projet. J'ai utilisé main.py.
Dans votre main.py mettez ce code ci-dessous.
from scrapy import cmdline
cmdline.execute("scrapy crawl spider".split())
Et vous devez créer une "configuration d'exécution" pour exécuter votre main.py.
Ce faisant, si vous mettez un point d'arrêt sur votre code, il s'arrête là.
À compter de 2018.1, cela est devenu beaucoup plus facile. Vous pouvez maintenant sélectionner Module name
dans votre projet Run/Debug Configuration
. Définissez ceci sur scrapy.cmdline
et le Working directory
à la racine du projet scrapy (celui avec settings.py
dedans).
Ainsi:
Vous pouvez maintenant ajouter des points d'arrêt pour déboguer votre code.
Je suis en train de courir dans un environnement virtuel avec Python 3.5.0 et en définissant le paramètre "script" sur /path_to_project_env/env/bin/scrapy
résolu le problème pour moi.
intellij idea fonctionne également.
créez 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 __== '__main__':
print('[*] beginning main thread')
name = "scrapy crawl stack"
#name = "scrapy crawl spa"
main(name)
print('[*] main thread exited')
print('main stop====================================================')
montrer ci-dessous:
Pour ajouter un peu à la réponse acceptée, après presque une heure, je me suis rendu compte que je devais sélectionner la configuration correcte dans la liste déroulante (près du centre de la barre d’icônes), puis cliquer sur le bouton Déboguer pour que cela fonctionne. J'espère que cela t'aides!
J'utilise également PyCharm, mais je n'utilise pas ses fonctionnalités de débogage intégrées.
Pour le débogage, j'utilise ipdb
. J'ai configuré un raccourci clavier pour insérer import ipdb; ipdb.set_trace()
sur n'importe quelle ligne pour laquelle le point d'arrêt doit se produire.
Ensuite, je peux taper n
pour exécuter l'instruction suivante, s
pour entrer dans une fonction, saisir un nom d'objet pour afficher sa valeur, modifier l'environnement d'exécution, taper c
pour continuer. exécution...
Ceci est très flexible, fonctionne dans des environnements autres que PyCharm, où vous ne contrôlez pas l'environnement d'exécution.
Il suffit de taper votre environnement virtuel pip install ipdb
Et de placer import ipdb; ipdb.set_trace()
sur une ligne où vous souhaitez que l'exécution soit suspendue.
Selon la documentation 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
J'utilise ce script simple:
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
process = CrawlerProcess(get_project_settings())
process.crawl('your_spider_name')
process.start()