Як використовувати PyCharm для налагодження проектів Scrapy


97

Я працюю над Scrapy 0.20 з Python 2.7. Я виявив, що PyCharm має хороший налагоджувач Python. Я хочу випробувати своїх павуків Скрапі, використовуючи його. Хтось знає, як це зробити, будь ласка?

Те, що я пробував

Насправді я намагався запустити павука як сценарій. В результаті я створив цей сценарій. Потім я спробував додати свій проект Scrapy до PyCharm як таку модель:
File->Setting->Project structure->Add content root.

Але я не знаю, що мені ще потрібно робити

Відповіді:


170

scrapyКоманда пітон скрипт , який означає , що ви можете запустити його з внутрішньої PyCharm.

Під час вивчення бінарного файлу scrap ( which scrapy) ви помітите, що насправді це сценарій python:

#!/usr/bin/python

from scrapy.cmdline import execute
execute()

Це означає, що команду типу scrapy crawl IcecatCrawlerтакож можна виконати так:python /Library/Python/2.7/site-packages/scrapy/cmdline.py crawl IcecatCrawler

Спробуйте знайти пакунок scrapy.cmdline. У моєму випадку місцезнаходження було тут:/Library/Python/2.7/site-packages/scrapy/cmdline.py

Створіть конфігурацію запуску / налагодження всередині PyCharm із цим сценарієм як сценарієм. Заповніть параметри сценарію командою scrap і павуком. У цьому випадку crawl IcecatCrawler.

Подобається це: Конфігурація запуску / налагодження PyCharm

Розмістіть свої точки зупинки в будь-якому місці вашого коду сканування, і це повинно працювати ™.


(<type 'exceptions.SyntaxError'>, SyntaxError ("Символ, відмінний від ASCII '\\ xf3' у файлі /Library/python/2.7/site-packages/scrapy/cmdline.pyc у рядку 1, але кодування не оголошено;
Aymon Fournier

1
Чудове рішення! Я також спробував використати сам двійковий файл scrapy, який знаходиться в основному в: / usr / bin / scrapy як скрипт з однаковими параметрами або будь-які інші команди скрапінгу, які ви хочете налагодити, і він працював просто ідеально. переконайтеся, що робочий каталог вказує на корінь вашого проекту скрапінгу, де знаходиться scrapy.cfg.
Nour Wolf

3
@AymonFournier Здається, ви намагаєтеся запустити файл .pyc. Замість цього запустіть відповідний файл .py (scrapy / cmdline.py).
Артур Гаспар,

4
Якщо я це роблю, мого модуля налаштувань не знайдено. ImportError: No module named settingsЯ перевірив, що робочим каталогом є каталог проекту. Він використовується в рамках проекту Django. Хтось ще натрапляв на цю проблему?
suntoch

6
Не забудьте налаштувати Working directory, інакше помилкаno active project, Unknown command: crawl, Use "scrapy" to see available commands, Process finished with exit code 2
crifan

105

Вам просто потрібно це зробити.

Створіть файл Python у папці сканера у вашому проекті. Я використовував main.py.

  • Проект
    • Гусеничний
      • Гусеничний
        • Павуки
        • ...
      • main.py
      • scrapy.cfg

Всередині main.py помістіть цей код нижче.

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

І вам потрібно створити "Конфігурацію запуску", щоб запустити main.py.

Роблячи це, якщо ви встановите точку зупинки у своєму коді, він на цьому зупиниться.


1
Це чудове рішення.
aristotll

1
Цей метод є більш корисним.
wyx

1
Цей рятує мені життя! Дякую!
zsljulius

5
Можливо, вам захочеться налаштувати кілька виконання для різних павуків, тому прийміть ім'я павука як аргумент конфігурації запуску. Потім імпортуйте sys spider = sys.argv [1] cmdline.execute ("сканування сканування {}". Format (spider) .split ())
miguelfg

2
Безумовно, це найчистіший і найшвидший спосіб зробити це, а також найкращий спосіб зберегти його у своєму CVS.
Хосе Томас Точіно,

23

Станом на 2018.1 це стало набагато простіше. Тепер ви можете вибрати Module nameу своєму проекті Run/Debug Configuration. Встановіть для цього значення scrapy.cmdlineі Working directoryдля кореневої директорії проекту зі скрепінгу (той, що маєsettings.py в ньому).

Так:

Конфігурація налагодження PyCharm Scrapy

Тепер ви можете додавати точки зупинки для налагодження коду.


8

Я запускаю scrap у virtualenv з Python 3.5.0 і встановлюю параметр "script", щоб /path_to_project_env/env/bin/scrapyвирішити проблему для мене.


Мене здивувало, що це працює, я думав, що скрапіп не працює з python 3
user1592380

1
Дякуємо, це працювало з Python 3.5 та virtualenv. "скрипт", як сказав @rioted, і встановлення "робочого каталогу" project/crawler/crawler, тобто, що містить каталог __init__.py.
Effel

5

ідея intellij також працює.

створити 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====================================================')

показати нижче:

введіть тут опис зображення

введіть тут опис зображення

введіть тут опис зображення


3

Щоб додати трохи до прийнятої відповіді, майже через годину я виявив, що мені довелося вибрати правильну конфігурацію запуску з випадаючого списку (біля центру панелі значків значків), а потім натиснути кнопку Налагодження, щоб вона працювала. Сподіваюся, це допомагає!


2

Я також використовую PyCharm, але не використовую його вбудовані функції налагодження.

Для налагодження я використовую ipdb. Я налаштував комбінацію клавіш, щоб вставити import ipdb; ipdb.set_trace()в будь-який рядок, де я хочу, щоб сталася точка розриву.

Потім я можу ввести тип, nщоб виконати наступний оператор, sвступити до функції, ввести будь-яке ім'я об'єкта, щоб побачити його значення, змінити середовище виконання, типc щоб продовжити виконання ...

Це дуже гнучко, працює в середовищах, відмінних від PyCharm, де ви не контролюєте середовище виконання.

Просто введіть у своєму віртуальному середовищі pip install ipdbта поставте import ipdb; ipdb.set_trace()на рядок, де потрібно, щоб виконання було призупинено.


2

Відповідно до документації 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

Я використовую цей простий скрипт:

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

Розширюючи версію відповіді @ Rodrigo, я додав цей сценарій, і тепер я можу встановити ім'я павука з конфігурації, замість того, щоб змінювати рядок.

import sys
from scrapy import cmdline

cmdline.execute(f"scrapy crawl {sys.argv[1]}".split())
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.