我正在使用Python 2.7开发Scrapy 0.20。我发现PyCharm具有良好的Python调试器。我想使用它测试我的Scrapy蜘蛛。有人知道该怎么做吗?
我尝试过的
实际上,我尝试将Spider作为脚本运行。结果,我构建了该脚本。然后,我尝试将Scrapy项目添加到PyCharm中,如下所示:File->Setting->Project structure->Add content root.
但是我不知道我还要做什么
我正在使用Python 2.7开发Scrapy 0.20。我发现PyCharm具有良好的Python调试器。我想使用它测试我的Scrapy蜘蛛。有人知道该怎么做吗?
File->Setting->Project structure->Add content root.
但是我不知道我还要做什么
Answers:
该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
。
像这样:
将断点放在爬网代码中的任何位置,它应该可以正常工作。
ImportError: No module named settings
我检查了工作目录是否为项目目录。它在Django项目中使用。还有其他人偶然发现这个问题吗?
Working directory
,否则将出错no active project, Unknown command: crawl, Use "scrapy" to see available commands, Process finished with exit code 2
您只需要这样做。
在项目的搜寻器文件夹上创建一个Python文件。我使用了main.py。
在您的main.py内部,将下面的代码。
from scrapy import cmdline
cmdline.execute("scrapy crawl spider".split())
并且您需要创建一个“运行配置”以运行您的main.py。
这样做,如果在代码上放置断点,它将在此处停止。
我正在使用Python 3.5.0在virtualenv中运行scrapy,并设置“ script”参数/path_to_project_env/env/bin/scrapy
为我解决了该问题。
project/crawler/crawler
,即目录hold __init__.py
。
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====================================================')
显示如下:
根据该文件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