Подтвердить что ты не робот

Как использовать PyCharm для отладки проектов Scrapy

Я работаю над Scrapy 0.20 с Python 2.7. Я обнаружил, что PyCharm имеет хороший отладчик Python. Я хочу протестировать своих пауков Scrapy, используя это. Кто-нибудь знает, как это сделать?

Что я пробовал

На самом деле я пытался запустить паук как скрипт. В результате я создал этот скрипт. Затем я попытался добавить проект Scrapy в PyCharm в качестве модели следующим образом:

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

Но я не знаю, что еще мне нужно делать

4b9b3361

Ответ 1

Команда scrapy представляет собой python script, что означает, что вы можете запустить его изнутри PyCharm.

Когда вы исследуете двоичный файл scrapy (which scrapy), вы заметите, что на самом деле это python script:

#!/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 с этим script как script. Заполните параметры script командой scrapy и пауком. В этом случае crawl IcecatCrawler.

Вот так: PyCharm Run/Debug Configuration

Поместите свои точки останова в любом месте вашего кода сканирования, и он должен работать ™.

Ответ 2

Вам просто нужно это сделать.

Создайте файл Python в папке искателя в вашем проекте. Я использовал main.py.

  • Project
    • Гусеничный
      • Гусеничный
        • Пауки
        • ...
      • main.py
      • scrapy.cfg

Внутри main.py введите этот код ниже.

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

И вам нужно создать "Запустить конфигурацию", чтобы запустить main.py.

Выполняя это, если вы поместите контрольную точку в свой код, она там остановится.

Ответ 3

Я запускаю scrapy в virtualenv с Python 3.5.0 и устанавливаю параметр < script /path_to_project_env/env/bin/scrapy для решения этой проблемы.

Ответ 4

Чтобы добавить бит к принятому ответу, спустя почти час я обнаружил, что мне нужно было выбрать правильную конфигурацию запуска из раскрывающегося списка (рядом с центром панели инструментов значка), затем нажмите кнопку "Отладка", чтобы получить ее работать. Надеюсь это поможет!

Ответ 5

Я также использую PyCharm, но я не использую его встроенные функции отладки.

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

Затем я могу набрать n, чтобы выполнить следующий оператор, s, чтобы войти в функцию, ввести любое имя объекта, чтобы увидеть его значение, изменить среду исполнения, ввести c для продолжения выполнения...

Это очень гибко, работает в других средах, кроме PyCharm, где вы не контролируете среду выполнения.

Просто введите виртуальную среду pip install ipdb и поместите import ipdb; ipdb.set_trace() в строку, где вы хотите приостановить выполнение.

Ответ 6

intellij idea также работают.

создать 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====================================================')

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

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

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

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

Ответ 7

Согласно документации 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