Programing

PyCharm을 사용하여 Scrapy 프로젝트를 디버깅하는 방법

lottogame 2020. 9. 10. 08:18
반응형

PyCharm을 사용하여 Scrapy 프로젝트를 디버깅하는 방법


저는 Python 2.7로 Scrapy 0.20에서 작업하고 있습니다. PyCharm에는 좋은 Python 디버거가 있습니다. 나는 그것을 사용하여 내 Scrapy 거미를 테스트하고 싶습니다. 누구든지 제발 방법을 알고 있습니까?

내가 시도한 것

사실 나는 거미를 스크립으로 돌리려고했습니다. 그 결과 저는 그 스크립트를 만들었습니다. 그런 다음 Scrapy 프로젝트를 PyCharm에 다음과 같은 모델로 추가하려고했습니다.

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

하지만 내가 뭘해야할지 모르겠어


scrapy명령은 PyCharm 내부에서 시작할 수 있음을 의미하는 python 스크립트입니다.

스크래피 바이너리 ( which scrapy) 를 살펴보면 이것이 실제로 파이썬 스크립트임을 알 수 있습니다.

#!/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 내에서 실행 / 디버그 구성을 만듭니다. 스크래피 명령과 스파이더로 스크립트 매개 변수를 채우십시오. 이 경우 crawl IcecatCrawler.

이렇게 : PyCharm 실행 / 디버그 구성

크롤링 코드의 아무 곳에 나 중단 점을 넣으면 작동합니다 ™.


이 작업을 수행하면됩니다.

프로젝트의 크롤러 폴더에 Python 파일을 만듭니다. 나는 main.py를 사용했다.

  • 계획
    • 무한 궤도
      • 무한 궤도
        • 거미
        • ...
      • main.py
      • scrapy.cfg

main.py 안에이 코드를 아래에 넣으십시오.

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

그리고 main.py를 실행하려면 "실행 구성"을 만들어야합니다.

이렇게하면 코드에 중단 점을두면 거기서 중단됩니다.


2018.1부터 이것은 훨씬 쉬워졌습니다. 이제 Module name프로젝트의 Run/Debug Configuration. 이로 설정 scrapy.cmdline하고 Working directoryscrapy 프로젝트 (와 하나의 루트 디렉토리에 settings.py그것에).

이렇게 :

PyCharm Scrapy 디버그 구성

이제 중단 점을 추가하여 코드를 디버깅 할 수 있습니다.


Python 3.5.0을 사용하여 virtualenv에서 scrapy를 실행하고 "script"매개 변수를 설정 /path_to_project_env/env/bin/scrapy하여 문제 해결했습니다.


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

아래에 표시 :

여기에 이미지 설명 입력

여기에 이미지 설명 입력

여기에 이미지 설명 입력


허용되는 답변에 약간을 추가하려면 거의 한 시간 후에 드롭 다운 목록 (아이콘 도구 모음의 중앙 근처)에서 올바른 실행 구성을 선택한 다음 작동하도록 디버그 버튼을 클릭해야합니다. 도움이 되었기를 바랍니다!


PyCharm도 사용하고 있지만 기본 제공 디버깅 기능을 사용하지 않습니다.

디버깅을 위해 ipdb. import ipdb; ipdb.set_trace()중단 점을 표시 할 줄 에 삽입 할 키보드 바로 가기를 설정했습니다 .

그런 다음 입력 n하여 다음 문을 실행하고 s, 함수 를 실행하고, 개체 이름을 입력하여 값을 확인하고, 실행 환경을 변경하고, 실행 c을 계속하려면 입력 할 수 있습니다.

이것은 매우 유연하며 실행 환경을 제어하지 않는 PyCharm 이외의 환경에서 작동합니다.

가상 환경을 입력 하고 실행을 일시 중지 할 줄에 pip install ipdb배치 하십시오 import ipdb; ipdb.set_trace().


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

참고 URL : https://stackoverflow.com/questions/21788939/how-to-use-pycharm-to-debug-scrapy-projects

반응형