Jak używać PyCharm do debugowania Scrapowych projektów

Pracuję nad Scrapy 0.20 z Pythonem 2.7. Znalazłem PyCharm ma dobry debugger Pythona. Chcę go przetestować. Wie ktoś jak to zrobić?

Czego próbowałem

Właściwie to próbowałem uruchomić pająka jako scrip. W rezultacie zbudowałem ten przepis. Następnie próbowałem dodać mój Scrapowy projekt do PyCharm jako model podobny do tego:
File->Setting->Project structure->Add content root.

Ale nie wiem co jeszcze muszę zrobić

Author: Do Nhu Vy, 2014-02-15

9 answers

Polecenie scrapy jest skryptem Pythona, co oznacza, że można go uruchomić z poziomu PyCharm.

Kiedy sprawdzisz scrapowy binarny (which scrapy) zauważysz, że jest to skrypt Pythona:

#!/usr/bin/python

from scrapy.cmdline import execute
execute()

Oznacza to, że polecenie takie jak scrapy crawl IcecatCrawler można również wykonać tak: python /Library/Python/2.7/site-packages/scrapy/cmdline.py crawl IcecatCrawler

Spróbuj znaleźć Scrappy ' ego.pakiet cmdline. W moim przypadku lokalizacja była tutaj: /Library/Python/2.7/site-packages/scrapy/cmdline.py

Utwórz konfigurację run/debug wewnątrz PyCharm z tym skryptem jako skryptem. Wypełnij skrypt parametry za pomocą polecenia Scrappy i spider. W tym przypadku crawl IcecatCrawler.

Like this: Konfiguracja Uruchamiania/Debugowania PyCharm

Umieść swoje punkty przerwania w dowolnym miejscu w kodzie indeksowania i powinno działać™.

 141
Author: Pullie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-26 21:15:46

Musisz to zrobić.

Utwórz plik Pythona w folderze crawlera w swoim projekcie. Używałem main.py.

  • Projekt
    • Crawler
      • Crawler
        • pająki
        • ...
      • main.py
      • Scrapy.cfg

Inside your main.py umieść ten kod poniżej.

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

I musisz utworzyć "Run Configuration", aby uruchomić swój main.py.

Robiąc to, jeśli umieścisz punkt przerwania na Twoim kodzie zatrzyma się na tym.

 79
Author: Rodrigo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-04 22:09:56

Uruchamiam Scrappy w virtualenv z Pythonem 3.5.0 i ustawienie parametru "script"na /path_to_project_env/env/bin/scrapy rozwiązało problem.

 7
Author: rioted,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-15 10:08:30

Aby dodać trochę do zaakceptowanej odpowiedzi, po prawie godzinie okazało się, że muszę wybrać poprawną konfigurację Uruchom z listy rozwijanej( w pobliżu środka paska narzędzi ikon), a następnie kliknąć przycisk Debug, aby uruchomić go do pracy. Mam nadzieję, że to pomoże!

 3
Author: taylor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-09 03:41:08

Intellij idea również działa.

Utwórz 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====================================================')

Pokaż poniżej:

Tutaj wpisz opis obrazka

Tutaj wpisz opis obrazka

Tutaj wpisz opis obrazka

 3
Author: LuciferJack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-25 16:02:28

Używam również PyCharm, ale nie używam jego wbudowanych funkcji debugowania.

Do debugowania używam ipdb. Ustawiłem skrót klawiaturowy, aby wstawić import ipdb; ipdb.set_trace() W dowolnej linii, którą chcę, aby punkt przerwania się odbył.

Następnie mogę wpisać n, aby wykonać następną instrukcję, s, aby wejść do funkcji, wpisać nazwę dowolnego obiektu, aby zobaczyć jego wartość, zmienić środowisko wykonywania, wpisać c, Aby kontynuować wykonywanie...

Jest bardzo elastyczny, działa w środowiskach innych niż PyCharm, gdzie nie kontrolujesz środowiska wykonawczego.

Po prostu wpisz swoje wirtualne środowisko pip install ipdb i umieść import ipdb; ipdb.set_trace() w linii, w której chcesz wstrzymać wykonanie.

 2
Author: warvariuc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-16 16:51:24

[[5]} od 2018.1 stało się to o wiele łatwiejsze. Możesz teraz wybrać Module name w swoim projekcie Run/Debug Configuration. Ustaw to na scrapy.cmdline i Working directory do katalogu głównego projektu Scrappy (tego z settings.py).

Like so:

Konfiguracja debugowania PyCharm Scrappy

Teraz możesz dodać punkty przerwania do debugowania kodu.

 1
Author: Rutger de Knijf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-21 13:21:18

Zgodnie z dokumentacją 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
Author: berardino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-19 04:52:21

Używam tego prostego skryptu:

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()
 0
Author: gangabass,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-21 23:14:53