【发布时间】:2017-04-13 13:59:10
【问题描述】:
我有一个奇怪的东西,我无法理解:
我已经使用 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 能够毫无问题地找到两个蜘蛛 journal 和 article。
现在,我想将此抓取称为我正在开发的应用程序中的许多步骤之一,因此从父文件夹到 Scrapy 项目我将 journal_scraper.py 导入我的 @ 987654327@ 文件并尝试运行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 相同的文件夹中创建一个小测试脚本,它与@ 执行相同的操作987654334@刮板按预期运行。
从 Scrapy 项目外部的脚本调用爬虫是否有某种限制?
如果我的情况不清楚,请询问更多详情。
【问题讨论】:
-
您是否尝试将一个名为___init___.py 的空文件放入您要从中导入的文件夹中(init 的每一侧都有两个下划线)?通常这可能是自定义函数导入失败的原因
-
@Chris 是的,有一个
__init__.py文件。导入并调用checkForUpdates()函数不是问题,是Scrapy找不到蜘蛛的问题。
标签: python web-scraping scrapy