2017-05-26 109 views
2

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

感谢

回答

2

在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) 
+0

感谢@ Granitosaurus,但我在尝试此操作时遇到错误:'ImportError:使用nam时无法导入名称BaseSpider' e显示的文件夹结构。试图玩'myproject'的替代品,当我使用'从scrapy.spiders导入BaseSpider'我能够运行蜘蛛,但它没有找到函数。关于我在哪里可能犯了错误的任何建议? – Casper

+0

@Casper你确定你的树结构是正确的吗?这可能是因为你需要安装你自己的软件包或者更新你的pathonpath,因为python实际上可以找到导入的位置。相似的问题:https://stackoverflow.com/questions/21352669/python-path-explained-import-from-a-subpackage – Granitosaurus

+0

原来我没有在正确的'__init __。py'中工作。感谢您的明确解释! – Casper