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


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

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

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

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

но я не знаю, что еще я должен сделать

9   78  

9 ответов:

The scrapy команда-это скрипт python, который означает, что вы можете запустить его изнутри PyCharm.

при рассмотрении скрэпи двоичный (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.пакет командной строки. В моем случае место было здесь: /Library/Python/2.7/site-packages/scrapy/cmdline.py

создайте конфигурацию запуска / отладки внутри PyCharm с помощью этот сценарий как сценарий. Заполнить параметры скрипта с помощью команды scrapy и паук. В данном случае crawl IcecatCrawler.

такой: PyCharm Run/Debug Configuration

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

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

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

    • обходчика
      • обходчика
        • пауки
        • ...
      • main.py
      • scrapy.cfg

внутри вашего main.py поместите этот код ниже.

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

и нужно создайте "конфигурацию запуска" для запуска вашего main.py.

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

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

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

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====================================================')

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

enter image description here

enter image description here

enter image description here

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

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

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

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

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

С 2018.1 это стало намного проще. Теперь вы можете выбрать Module name в вашем проекте Run/Debug Configuration. Установите это в scrapy.cmdline и Working directory в корневой каталог проекта scrapy (тот, что с settings.py в нем).

вот так:

PyCharm Scrapy debug configuration

теперь вы можете добавить точки останова для отладки кода.

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

Я использую этот простой скрипт:

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()