scrapy 管道的访问实例 class
Access Instance of scrapy pipeline class
我想访问变量 self.cursor
以使用活动的 postgreSQL 连接,但我不知道如何访问管道的 scrapy 实例 class。
class ScrapenewsPipeline(object):
def open_spider(self, spider):
self.connection = psycopg2.connect(
host= os.environ['HOST_NAME'],
user=os.environ['USERNAME'],
database=os.environ['DATABASE_NAME'],
password=os.environ['PASSWORD'])
self.cursor = self.connection.cursor()
self.connection.set_session(autocommit=True)
def close_spider(self, spider):
self.cursor.close()
self.connection.close()
def process_item(self, item, spider):
print ("Some Magic Happens Here")
def checkUrlExist(self, item):
print("I want to call this function from my spider to access the
self.cursor variable")
请注意,我知道我可以使用 yield item
访问 process_item
,但该函数正在做其他事情,我想通过 self.cursor
中的 [=] 访问连接16=] 并且能够从我的蜘蛛中随意调用 class 的实例!
谢谢。
您可以通过在此处执行 spider.variable_name
来访问所有蜘蛛 class 变量。
class MySpider(scrapy.Spider):
name = "myspider"
any_variable = "any_value"
你的管道在这里
class MyPipeline(object):
def process_item(self, item, spider):
spider.any_variable
我建议你在你的 Spider class 中创建一个连接,就像我在我的示例中声明的 any_variable
一样,这将可以在你的 Spider 中使用 self.any_variable
和你的管道访问, 可以通过 spider.any_variable
访问
我意识到我来晚了一点,但如果有人正在寻找这个问题的正确答案,可以访问任何管道或中间件(或就此而言,下载器等)实例通过控制其他一切的爬虫 object。您可以通过使用 from_crawler
类方法在初始化时设置 .crawler
属性来访问爬虫中的爬虫。
在 scrapy shell 中进行一些挖掘,您应该能够找到当前抓取中使用的任何 object 的实例,例如
- 蜘蛛中间件
crawler.engine.scraper.spidermw.middlewares
- 下载器中间件
crawler.engine.downloader.middleware.middlewares
- Item pipelines
crawler.engine.scraper.itemproc.middlewares
(这么认为。这只是基于对scrapy的初步探索shell)
请注意,我并不是提倡人们应该这样做来从蜘蛛访问数据库连接 object。只是任何 Scrapy object 实例都可以通过爬虫 object 访问,这是根据标题对 OP 问题的回答。
我想访问变量 self.cursor
以使用活动的 postgreSQL 连接,但我不知道如何访问管道的 scrapy 实例 class。
class ScrapenewsPipeline(object):
def open_spider(self, spider):
self.connection = psycopg2.connect(
host= os.environ['HOST_NAME'],
user=os.environ['USERNAME'],
database=os.environ['DATABASE_NAME'],
password=os.environ['PASSWORD'])
self.cursor = self.connection.cursor()
self.connection.set_session(autocommit=True)
def close_spider(self, spider):
self.cursor.close()
self.connection.close()
def process_item(self, item, spider):
print ("Some Magic Happens Here")
def checkUrlExist(self, item):
print("I want to call this function from my spider to access the
self.cursor variable")
请注意,我知道我可以使用 yield item
访问 process_item
,但该函数正在做其他事情,我想通过 self.cursor
中的 [=] 访问连接16=] 并且能够从我的蜘蛛中随意调用 class 的实例!
谢谢。
您可以通过在此处执行 spider.variable_name
来访问所有蜘蛛 class 变量。
class MySpider(scrapy.Spider):
name = "myspider"
any_variable = "any_value"
你的管道在这里
class MyPipeline(object):
def process_item(self, item, spider):
spider.any_variable
我建议你在你的 Spider class 中创建一个连接,就像我在我的示例中声明的 any_variable
一样,这将可以在你的 Spider 中使用 self.any_variable
和你的管道访问, 可以通过 spider.any_variable
我意识到我来晚了一点,但如果有人正在寻找这个问题的正确答案,可以访问任何管道或中间件(或就此而言,下载器等)实例通过控制其他一切的爬虫 object。您可以通过使用 from_crawler
类方法在初始化时设置 .crawler
属性来访问爬虫中的爬虫。
在 scrapy shell 中进行一些挖掘,您应该能够找到当前抓取中使用的任何 object 的实例,例如
- 蜘蛛中间件
crawler.engine.scraper.spidermw.middlewares
- 下载器中间件
crawler.engine.downloader.middleware.middlewares
- Item pipelines
crawler.engine.scraper.itemproc.middlewares
(这么认为。这只是基于对scrapy的初步探索shell)
请注意,我并不是提倡人们应该这样做来从蜘蛛访问数据库连接 object。只是任何 Scrapy object 实例都可以通过爬虫 object 访问,这是根据标题对 OP 问题的回答。