【问题标题】:Scrapy - Can't call scraper from a script in parent folder to scrapy projectScrapy - 无法从父文件夹中的脚本调用刮板到刮板项目
【发布时间】: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 能够毫无问题地找到两个蜘蛛 journalarticle

现在,我想将此抓取称为我正在开发的应用程序中的许多步骤之一,因此从父文件夹到 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


【解决方案1】:

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

from parent1.parent1.spiders.spider_file_name import spider_class_name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 2023-03-31
    • 2014-07-16
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多