2016-01-10 77 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