我在以下目录中有一个scrapy项目“教程”
C:\wamp64\www\教程>
项目目录结构如下。
我想通过我的自定义 python 脚本runningpiders.py运行蜘蛛
from __future__ import print_function
import scrapy
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
def main():
process = CrawlerProcess(get_project_settings())
process.crawl("quotes")
process.start()
if __name__ == '__main__' : main()
Run Code Online (Sandbox Code Playgroud)
当自定义python脚本从scrapy项目文件夹中运行时,蜘蛛可以正常运行,例如
C:\wamp64\www\tutorial>python runningpiders.py
但是当自定义 python 脚本从项目文件夹之外运行时,scrapy 会引发以下异常,例如
C:\wamp64\www>python 教程/runspiders.py
File "C:\Python27\lib\site-packages\scrapy\spiderloader.py", line 43, in load
raise KeyError("Spider not found: {}".format(spider_name))
KeyError: 'Spider not found: quotes'
Run Code Online (Sandbox Code Playgroud)
Scrapy spider 只是 Python 类( 的子类scrapy.Spider),因此您的脚本需要知道在哪里可以找到这些类,就像您在脚本中使用的任何其他 Python 类或模块一样。
在 Scrapy 项目中,你有一个scrapy.cfg文件,它至少做一件事:它告诉框架在哪里可以找到项目设置。对于教程项目,它是tutorial.settings.
在设置中,Scrapy 希望SPIDER_MODULES告诉它哪些模块包含蜘蛛类。对于本教程,这是tutorial.spiders.
在项目中运行脚本时,get_project_settings()为您完成所有这些工作,以发现设置模块并读取SPIDER_MODULES,因为有一个scrapy.cfg文件。
在tutorial/文件夹之外,您没有scrapy.cfg. 而且您的 Python 脚本也可能不知道这tutorial.spiders意味着什么。
首先,你可以添加/path/to/tutorial/tutorial到你的Python 路径中,这样import tutorial.spiders就意味着一些东西。
但是您也不需要依赖,get_project_settings()因为您不在 Scrapy 项目文件夹中。但是,您可以更改为
process = CrawlerProcess({'SPIDER_MODULES': 'tutorial.spiders'})
Run Code Online (Sandbox Code Playgroud)
(前提是您已更新 Python 路径)
另一种研究是使用scrapy runspider /path/to/spider/module.py不需要 Scrapy 项目的方法。
您可能还想阅读配置选项(带有scrapy.cfg系统上其他地方的文件)或有关Scrapy 项目结构的信息。
| 归档时间: |
|
| 查看次数: |
1517 次 |
| 最近记录: |