2016-01-10 36 views
0

我有一点奇怪的一个,我不能让我的头在这里:Scrapy - 无法在父文件夹从脚本中调用刮刀scrapy项目

我设置一个webscraper使用Scrapy和它执行时,我从CLI运行以下文件刮精($ python journal_scraper.py):

journal_scraper.py:

from scrapy.crawler import CrawlerProcess 
from scrapy.utils.project import get_project_settings 

def checkForUpdates(): 
    process = CrawlerProcess(get_project_settings()) 

    process.crawl('journal') 
    process.crawl('article') 
    process.start() 

if __name__ == '__main__': 
    checkForUpdates() 

process能够找到两个十字journalarticle没有问题。现在

,我想称之为刮由于我是从父文件夹发展得如此之到Scrapy项目的应用程序内的许多步骤之一我导入journal_scraper.py到我main.py文件,并尝试运行checkForUpdates()功能:

main.py:

from scripts.journal_scraper import checkForUpdates 
checkForUpdates() 

,我得到以下几点:

2016-01-10 20:30:56 [scrapy] INFO: Scrapy 1.0.4 started (bot: scrapybot) 
2016-01-10 20:30:56 [scrapy] INFO: Optional features available: ssl, http11 
2016-01-10 20:30:56 [scrapy] INFO: Overridden settings: {} 
Traceback (most recent call last): 
    File "main.py", line 13, in <module> 
    checkForUpdates() 
    File "/Users/oldo/Python/projects/AMS-Journal-Scraping/AMS_Journals/scripts/journal_scraper.py", line 8, in checkForUpdates 
    process.crawl('journal') 
    File "/Users/oldo/Python/virtual-environments/AMS-Journal/lib/python2.7/site-packages/scrapy/crawler.py", line 150, in crawl 
    crawler = self._create_crawler(crawler_or_spidercls) 
    File "/Users/oldo/Python/virtual-environments/AMS-Journal/lib/python2.7/site-packages/scrapy/crawler.py", line 165, in _create_crawler 
    spidercls = self.spider_loader.load(spidercls) 
    File "/Users/oldo/Python/virtual-environments/AMS-Journal/lib/python2.7/site-packages/scrapy/spiderloader.py", line 40, in load 
    raise KeyError("Spider not found: {}".format(spider_name)) 
KeyError: 'Spider not found: journal' 

我也试着改变main.py到:

import subprocess 
subprocess.call('python ./scripts/scraper.py', shell=True) 

其产生同样的错误。

我敢肯定,这事做的事实,我调用此函数构成的父文件夹,因为如果我在同一个文件夹一个小的测试脚本journal_scraper.py,做同样的事情main.py的刮板按预期运行。

从Scrapy项目外部的脚本调用scrapers是否存在某种限制?

如果我的情况不明确,请询问更多详情。

+0

你试图把一个空文件entitled___init___.py的文件夹中,你要从中导入(两个强调init的每一侧)?通常这可能是导入自定义函数导入失败的原因 – Chris

+0

@Chris是的,有一个'__init __。py'文件。导入并调用'checkForUpdates()'函数不是问题,这与Scrapy无法找到蜘蛛有关。 –

回答

0

虽然已经很晚了,如果你还在寻找解决方案,尝试导入类的蜘蛛:

from parent1.parent1.spiders.spider_file_name import spider_class_name