【问题标题】:Running scrapy from script (beginner)从脚本运行scrapy(初学者)
【发布时间】:2013-03-19 20:25:41
【问题描述】:

我开始接触 python,是的,我已经在这个网站和网络上搜索了答案,但不知何故我真的无法让它运行。

我创建了一个蜘蛛类 EbaySpider,驻留在 spider/ebay.py 中,我可以从命令行毫无问题地启动它(即使输出到 JSON 文件)。现在我想从另一个 .py 文件中启动 scrapy,这样我就可以直接访问爬取的数据并将其输出到 GUI(稍后会考虑如何做到这一点)。

我已从this question 获取代码(提问者代码,因为我不需要多次运行蜘蛛)并添加

from spiders import ebay
from scrapy.crawler import CrawlerProcess

从一开始,手头就有所有必要的资源。

我得到的错误是

ImportError:无法导入名称 ebay。

我自然地玩弄了 importstatement,将其从“ebay”更改为“EbaySpider”,将“spiders”更改为“spiders.ebay”或“projectname.spiders.ebay”,但不知何故,它们似乎都不起作用。

如果你能告诉我如何解决这个问题,或者以其他方式运行蜘蛛然后访问我的 python 程序中的爬取数据,那就太好了。我对任何可行且可以理解的东西感到满意:)

谢谢大家!

【问题讨论】:

    标签: python web-scraping scrapy importerror


    【解决方案1】:

    基本上你有三个选择;

    • 将 'spiders' 目录作为模块安装在您的 PYTHONPATH 中
    • 将“ebay.py”文件放在与您的脚本相同的目录中,只需 import ebay
    • 修改您的 python 路径,以便 python 可以找到您的蜘蛛。

    对于第三个选项,您必须在spiders 目录中创建一个文件__init__.py。它可以是空的。然后你必须修改你的脚本如下(假设spiders是你的程序运行目录的子目录):

    import os
    import sys
    sys.path.append(os.getcwd()+'/spiders')
    print sys.path
    from spiders import ebay
    

    【讨论】:

    • 将它复制到同一目录中是一种快速修复,谢谢!
    【解决方案2】:

    您可以尝试使用 python 的relative import 功能从相对于您的 python 脚本的目录中导入模块。您无法导入模块的原因是spiders 模块不是您的PYTHON_PATH

    from .spiders import ebay

    注意:spiders之前的

    【讨论】:

    • 导致 'ValueError: Attempted relative import in non-package'
    猜你喜欢
    • 1970-01-01
    • 2022-11-14
    • 2020-09-26
    • 1970-01-01
    • 2014-03-06
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多