【发布时间】:2017-05-26 18:10:28
【问题描述】:
所以我正在尝试编写可以从所有scrapy 蜘蛛中调用的函数。 我的项目中是否有一个地方可以定义这些函数,还是需要在每个蜘蛛中导入它们?
谢谢
【问题讨论】:
标签: scrapy scrapy-spider
所以我正在尝试编写可以从所有scrapy 蜘蛛中调用的函数。 我的项目中是否有一个地方可以定义这些函数,还是需要在每个蜘蛛中导入它们?
谢谢
【问题讨论】:
标签: scrapy scrapy-spider
你不能在 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)
【讨论】:
ImportError: cannot import name BaseSpider 同时使用您显示的文件夹结构的名称。尝试更换myproject,当我使用from scrapy.spiders import BaseSpider 时,我可以运行蜘蛛,但找不到该功能。关于我可能在哪里犯错的任何建议?
__init__.py 中工作。感谢您的明确解释!