爬虫类方法的工作?
我需要将以下类方法添加到现有管道http://doc.scrapy.org/en/latest/faq.html#im-getting-an-error-cannot-import-name-crawler
我不知道如何在我的课堂中使用这些类方法中的两个
from twisted.enterprise import adbapi
import MySQLdb.cursors
class MySQLStorePipeline(object):
"""A pipeline to store the item in a MySQL database.
This implementation uses Twisted's asynchronous database API.
"""
def __init__(self, dbpool):
self.dbpool = dbpool
@classmethod
def from_settings(cls, settings):
dbargs = dict(
host= settings['DB_HOST'],
db= settings['DB_NAME'],
user= settings['DB_USER'],
passwd= settings['DB_PASSWD'],
charset='utf8',
use_unicode=True,
)
dbpool = adbapi.ConnectionPool('MySQLdb', **dbargs)
return cls(dbpool)
def process_item(self, item, spider):
pass
从我对类方法的理解中,python类中的几个类方法应该没问题。 这取决于调用者需要哪一个。 但是,直到现在,我在scrapy管道中才看到from_crawler
。 从那里你可以通过crawler.settings
访问设置
你确定from_settings
是必需的吗? 我没有检查所有的出现,但在middleware.py
优先级似乎适用:如果一个crawler
对象是可用的,并且from_crawler
方法存在,这是采取。 否则,如果有from_settings
方法,则执行此操作。 否则,将采用原始构造函数。
if crawler and hasattr(mwcls, 'from_crawler'):
mw = mwcls.from_crawler(crawler)
elif hasattr(mwcls, 'from_settings'):
mw = mwcls.from_settings(settings)
else:
mw = mwcls()
我承认,我不知道这是否也是管道创建的地方(我猜不是,但没有pipelines.py),但实现看起来非常合理。
所以,我只是要么:
from_crawler
并仅使用该方法 from_crawler
方法并使用它们 新方法可能如下所示(尽可能少地复制代码):
@classmethod
def from_crawler(cls, crawler):
obj = cls.from_settings(crawler.settings)
obj.do_something_on_me_with_crawler(crawler)
return obj
当然,这取决于你需要的东西。
链接地址: http://www.djcxy.com/p/54287.html