![](/img/trans.png)
[英]Error When Debugging Django project with ImageFields in Visual Studio Code
[英]Debugging Scrapy Project in Visual Studio Code
我在 Windows 机器上有 Visual Studio Code,我正在制作一个新的 Scrapy Crawler。 爬虫工作正常,但我想调试代码,为此我将其添加到我的launch.json
文件中:
{
"name": "Scrapy with Integrated Terminal/Console",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"pythonPath": "${config:python.pythonPath}",
"program": "C:/Users/neo/.virtualenvs/Gers-Crawler-77pVkqzP/Scripts/scrapy.exe",
"cwd": "${workspaceRoot}",
"args": [
"crawl",
"amazon",
"-o",
"amazon.json"
],
"console": "integratedTerminal",
"env": {},
"envFile": "${workspaceRoot}/.env",
"debugOptions": [
"RedirectOutput"
]
}
但我无法达到任何断点。 PS:我从这里获取了 JSON 脚本: http : //www.stevetrefethen.com/blog/debugging-a-python-scrapy-project-in-vscode
为了执行典型的scrapy runspider <PYTHON_FILE>
命令,必须将以下配置设置到您的launch.json
:
{
"version": "0.1.0",
"configurations": [
{
"name": "Python: Launch Scrapy Spider",
"type": "python",
"request": "launch",
"module": "scrapy",
"args": [
"runspider",
"${file}"
],
"console": "integratedTerminal"
}
]
}
在任何地方设置断点,然后调试。
在您的 scrapy 项目文件夹中,使用以下内容创建一个runner.py
模块:
import os from scrapy.cmdline import execute os.chdir(os.path.dirname(os.path.realpath(__file__))) try: execute( [ 'scrapy', 'crawl', 'SPIDER NAME', '-o', 'out.json', ] ) except SystemExit: pass
在要调试的行中放置一个断点
使用 vscode 调试器运行runner.py
像这样配置你的json
文件:
"version": "0.2.0",
"configurations": [
{
"name": "Crawl with scrapy",
"type": "python",
"request": "launch",
"module": "scrapy",
"cwd": "${fileDirname}",
"args": [
"crawl",
"<SPIDER NAME>"
],
"console": "internalConsole"
}
]
单击 VSCode 中与您的蜘蛛对应的选项卡,然后启动与json
文件对应的调试会话。
我做到了。 最简单的方法是制作一个运行脚本runner.py
import scrapy
from scrapy.crawler import CrawlerProcess
from g4gscraper.spiders.g4gcrawler import G4GSpider
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
'FEED_FORMAT': 'json',
'FEED_URI': 'data.json'
})
process.crawl(G4GSpider)
process.start() # the script will block here until the crawling is finished
然后,当我在这个文件上启动调试器时,我在蜘蛛中添加了断点。 参考: https : //doc.scrapy.org/en/latest/topics/practices.html
不需要修改launch.json,默认的“Python: Current File (Integrated Terminal)”完美运行。 对于 Python3 项目,记得将 runner.py 文件与scrapy.cfg文件(即项目根目录)放在同一级别。
@naqushab 上面的 runner.py 代码。 请注意processes.crawl( className ) ,其中className是您要设置断点的蜘蛛类。
你也可以试试
{
"configurations": [
{
"name": "Python: Scrapy",
"type": "python",
"request": "launch",
"module": "scrapy",
"cwd": "${fileDirname}",
"args": [
"crawl",
"${fileBasenameNoExtension}",
"--loglevel=ERROR"
],
"console": "integratedTerminal",
"justMyCode": false
}
]
}
但该字段的名称应与蜘蛛名称相同。
--loglevel=ERROR 是为了获得更简洁的输出;)
我应用了@fmango 的代码并对其进行了改进。
无需编写单独的运行程序文件,只需将这些代码行粘贴到蜘蛛的末尾即可。
运行 python 调试器。 仅此而已
if __name__ == '__main__':
import os
from scrapy.cmdline import execute
os.chdir(os.path.dirname(os.path.realpath(__file__)))
SPIDER_NAME = MySpider.name
try:
execute(
[
'scrapy',
'crawl',
SPIDER_NAME,
'-s',
'FEED_EXPORT_ENCODING=utf-8',
]
)
except SystemExit:
pass
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.