從數據庫中獲得Start_Urls不幸的是我沒有足夠的人口來作出評論,所以我不得不做出這個新的問題,指的是https://stackoverflow.com/questions/23105590/how-to-get-the-pipeline-object-in-scrapy-spiderScrapy:通過管道
我有一個DB的網址。所以我想從我的數據庫中獲取start_url。到目前爲止不是一個大問題。 嗯,我不想在蜘蛛和管道中的mysql的東西,我得到一個問題。 如果我嘗試將管道對象交給我的蜘蛛像提到的問題,我只得到一個屬性錯誤與消息
'None Type' object has no attribute getUrl
我認爲實際的問題是,spider_opened的功能不會被調用(也插入了從未在控制檯中顯示其輸出的打印語句)。 有人想法如何獲得蜘蛛內的管道對象?
MySpider.py
def __init__(self):
self.pipe = None
def start_requests(self):
url = self.pipe.getUrl()
scrapy.Request(url,callback=self.parse)
Pipeline.py
@classmethod
def from_crawler(cls, crawler):
pipeline = cls()
crawler.signals.connect(pipeline.spider_opened, signals.spider_opened)
def spider_opened(self, spider):
spider.pipe = self
def getUrl(self):
...
但是open_spider和spider_opened從信號有什麼不同? (https://doc.scrapy.org/en/latest/topics/signals.html#spider-已打開) 我需要更多,然後只有一個蜘蛛不同的工作。他們通常會有相同的sql語句,所以我沒有多次使用相同的代碼。 – phenixclaw
open_spider方法已經連接到signals.spider_opened信號。如果你有多個蜘蛛,只需製作一個可以從中繼承start_urls邏輯的基礎蜘蛛。 – Granitosaurus
因此,我使用哪種open_spider並不重要? 但回到我的問題: 好吧,讓我們來思考。 我爲start_urls實現了一個基礎蜘蛛。所以我必須將SQL連接的邏輯放入基本蜘蛛。 但是如果其他蜘蛛會將他們的結果寫入數據庫呢?在那裏我必須在管道中實現SQL連接的邏輯。所以我有相同的代碼2次?我只是想避免它。有沒有解決方法? – phenixclaw