2017-12-03 19 views
0

변수 self.cursor에 액세스하여 활성 postgreSQL 연결을 사용하려고하지만 파이프 라인 클래스의 치료 인스턴스에 액세스하는 방법을 파악할 수 없습니다.액세스 파이프 라인 파이프 라인 클래스

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에 액세스 할 수 있습니다 실현,주의하지만 기능은 다른 물건을 내가 checkUrlExist에서 self.cursor를 통해 연결의 접근을 원하는에서 클래스의 인스턴스를 호출 할 수 제발 내 거미가 마음대로! 감사합니다.

+0

'objectName.cursor'을 통해 액세스 할 수 있습니까? – RottenCandy

+0

objectName은 저에게 알려지지 않았습니다. 거미가 자동으로 시작될 때 파이프 라인 클래스가 호출됩니다. 클래스의 해당 인스턴스에 인스턴스를 연결하려고합니다. :) – atb00ker

+0

어쩌면 당신은'getattr'을 고려해야 할 것입니다 https://stackoverflow.com/questions/4075190/what-is-getattr-exactly-and-how-do-i-use-it#4076099 – RottenCandy

답변

1

여기서 spider.variable_name을 수행하여 모든 스파이더 클래스 변수에 액세스 할 수 있습니다.

class MySpider(scrapy.Spider): 

     name = "myspider" 

     any_variable = "any_value" 

여기에 귀하의 파이프 라인

class MyPipeline(object): 

    def process_item(self, item, spider): 

     spider.any_variable 

난 당신이 self.any_variable를 사용하여 거미와 파이프 라인에 액세스 할 수 있습니다 내 예제에서 any_variable를 선언처럼 당신의 스파이더 클래스에서 연결을 작성하는 것이 좋습니다 , spider.any_variable

+0

나는 60 마리의 거미를 가지고 있습니다. 이 경우에는 모두 자신의 postgreSQL 연결이 있으므로 제한된 RAM 만 있기 때문에 유용하지 않습니다. – atb00ker