【发布时间】:2017-08-28 04:04:56
【问题描述】:
https://docs.scrapy.org/en/latest/topics/item-pipeline.html#from_crawler https://docs.scrapy.org/en/latest/topics/api.html#crawler-api
看了官方文档,我还是有问题理解crawler。我很清楚其他组件(spider、item&its loader、pipeline、settings)。
但是crawler 如何以及何时影响整个过程?
crawler 如何使其可扩展?
例如:我编写了一个项目管道,以便将数据填充到 MongoDB。
import pymongo
class MyPipeline(object):
collection_name = "mydb"
def __init__(self, mongo_uri, mongo_db):
self.mongo_uri = mongo_uri
self.mongo_db = mongo_db
@classmethod
def from_crawler(cls, crawler):
return cls(crawler.settings.get("MONGO_URI", "mongodb://test/"), crawler.settings.get("MONGO_DATABASE", "mydb"))
def open_spider(self, spider):
self.client_connection = pymongo.MongoClient(self.mongo_uri)
self.db = self.client_connection[self.mongo_db]
def close_spider(self, spider):
self.client_connection.close()
def process_item(self, item, spider):
self.db[self.collection_name].insert_one(dict(item))
return item
似乎pipeline 可以通过from_crawler 方法访问crawler。 from_crawler 方法返回一个带有设置的初始化 pipeline 实例。
为什么不直接从scrapy.settings 导入我的自定义设置,而不是使用crawler?
请原谅我问了太多问题:)
【问题讨论】: