【问题标题】:Write functions for all scrapy spiders为所有scrapy蜘蛛编写函数
【发布时间】:2017-05-26 18:10:28
【问题描述】:

所以我正在尝试编写可以从所有scrapy 蜘蛛中调用的函数。 我的项目中是否有一个地方可以定义这些函数,还是需要在每个蜘蛛中导入它们?

谢谢

【问题讨论】:

    标签: scrapy scrapy-spider


    【解决方案1】:

    你不能在 python 中隐式地导入代码(至少不能在没有修改的情况下),毕竟显式比隐式好 - 所以这不是一个好主意。

    然而在scrapy中,拥有具有通用函数和方法的基类Spider是很常见的。

    假设你有这棵树:

    ├── myproject
    │   ├── __init__.py
    │   ├── spiders
    │   │   ├── __init__.py
    │   │   ├── spider1.py
    │   │   ├── spider2.py
    ├── scrapy.cfg
    

    我们可以在spiders/__init__.py中创建一个基础蜘蛛:

    class BaseSpider(Spider):
        def common_parse(self, response):
            # do something     
    

    并在你的蜘蛛中继承它:

    from myproject.spiders import BaseSpider
    class Spider1(BaseSpider):
        def parse(self, response):
            # use common methods!
            if 'indicator' in response.body:
                self.common_parse(response)
    

    【讨论】:

    • 感谢@Granitosaurus,但我在尝试此操作时遇到错误:ImportError: cannot import name BaseSpider 同时使用您显示的文件夹结构的名称。尝试更换myproject,当我使用from scrapy.spiders import BaseSpider 时,我可以运行蜘蛛,但找不到该功能。关于我可能在哪里犯错的任何建议?
    • @Casper 你确定你的树结构是正确的吗?可能是您需要安装自己的软件包或使用模块所在的位置更新 pathonpath,以便 python 可以实际找到导入。类似问题:stackoverflow.com/questions/21352669/…
    • 原来我没有在正确的__init__.py 中工作。感谢您的明确解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多