簡體   English   中英

如何使用PyCharm調試Scrapy項目

[英]How to use PyCharm to debug Scrapy projects

我正在使用 Python 2.7 開發 Scrapy 0.20。 我發現 PyCharm 有一個很好的 Python 調試器。 我想用它來測試我的 Scrapy 蜘蛛。 請問有人知道該怎么做嗎?

我試過的

實際上我試圖將蜘蛛作為腳本運行。 結果,我構建了那個腳本。 然后,我嘗試將我的 Scrapy 項目作為 model 添加到 PyCharm 中,如下所示:
 File->Setting->Project structure->Add content root.

但我不知道我還需要做什么

scrapy命令是一個 Python 腳本,這意味着您可以從 PyCharm 內部啟動它。

當您檢查 scrapy 二進制文件( 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 中創建運行/調試配置。 用scrapy 命令和spider 填充腳本參數。 在這種情況下, crawl IcecatCrawler

像這樣:PyCharm 運行/調試配置

將斷點放在爬行代碼中的任何位置,它應該可以工作™。

你只需要這樣做。

在項目的 crawler 文件夾中創建一個 Python 文件。 我使用了 main.py。

  • 項目
    • 履帶式
      • 履帶式
        • 蜘蛛
        • ...
      • 主文件
      • 配置文件

在您的 main.py 中,將此代碼放在下面。

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

你需要創建一個“運行配置”來運行你的 main.py。

這樣做,如果你在你的代碼上放置一個斷點,它就會停在那里。

從 2018.1 開始,這變得容易多了。 您現在可以在項目的Run/Debug Configuration選擇Module name 將其設置為scrapy.cmdline並將Working directory settings.py為scrapy 項目的根目錄(其中包含settings.py的那個)。

像這樣:

PyCharm Scrapy 調試配置

現在您可以添加斷點來調試您的代碼。

我正在使用 Python 3.5.0 在 vi​​rtualenv 中運行 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() import ipdb; ipdb.set_trace()在我希望斷點發生的任何行上。

然后我可以輸入n執行下一條語句, s進入一個函數,輸入任何對象名稱以查看其值,更改執行環境,輸入c繼續執行...

這非常靈活,適用於 PyCharm 以外的環境,您無法控制執行環境。

只需在您的虛擬環境中輸入pip install ipdb並放置import ipdb; ipdb.set_trace() import ipdb; ipdb.set_trace()在您希望暫停執行的行上。

更新

您也可以pip install pdbpp並使用標准import pdb; pdb.set_trace import pdb; pdb.set_trace而不是ipdb PDB++ 在我看來更好。

為了給接受的答案添加一點,將近一個小時后,我發現我必須從下拉列表(靠近圖標工具欄的中心)中選擇正確的運行配置,然后單擊調試按鈕以使其工作。 希望這可以幫助!

根據文檔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()

擴展@Rodrigo 版本的答案,我添加了這個腳本,現在我可以從配置中設置蜘蛛名稱,而不是在字符串中進行更改。

import sys
from scrapy import cmdline

cmdline.execute(f"scrapy crawl {sys.argv[1]}".split())

可能有點晚了,但也許它可以幫助某人:

由於最新的 PyCharm 版本實際上非常簡單,您可以直接調用 Scrapy - 參見運行時配置的附圖(Scrapy 教程)。

使用 PyCharm 2022.1.4 測試。

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM