2012-10-09 143 views
1

我想用scrapy廢棄一些論壇,並將數據存儲在數據庫中。但是,我不知道在更新數據庫時要高效地做到這一點。這是我的蜘蛛是什麼樣子:刮scrapy論壇與scrapy

class ForumSpider(CrawlSpider): 
name = "forum" 
allowed_domains= ["forums.example.com"] 
start_urls = ["forums.example.com/index.php"] 
rules = (
     Rule(SgmlLinkExtractor(allow=(r'/forum?id=\d+',)), 
     follow=True, callback='parse_index'), 
    ) 

def parse_index(self, response): 
    hxs = HtmlXPathSelector(response) 
    #parsing....looking for threads..... 
    #pass the data to pipeline and store in to the db.... 

我的問題是,當我再次放棄當日的論壇上,說一個星期後,沒有一點要經過的所有網頁,因爲新的線程或與任何線程新的帖子將在其他不活動的帖子之上。我的想法是檢查論壇的第一頁(forums.example.com/forum?id=1),如果它在第一頁找到了具有相同URL和相同回覆數的線程。沒有意義去第二頁。所以蜘蛛應該繼續到另一個論壇(forums.example.com/forum?id=2)。我嘗試修改start_urls和rules,但似乎一旦蜘蛛運行就沒有響應。有沒有辦法在scrapy中做到這一點?

我的第二個問題是如何爲不同的蜘蛛使用不同的管道。我發現堆棧溢出。但似乎scrapy不是爲了做到這一點而設計的,似乎你認爲爲不同的網站創建一個新的項目。

我使用錯誤的工具來做到這一點嗎?或者我錯過了一些東西。我想過使用機械化和lxml來做到這一點。但我需要實現扭曲和Unicode處理等,這些讓我想用scrapy堅持

感謝

回答

1

你所要求的是創造一個動態的http請求。

在parse_index函數內部執行此操作。
request = self.make_requests_from_url(http://forums.example.com/forum?id=2)
return request

如果你想提交多個http請求返回一個數組。
看到這個Request in scrapy

你是正確的關於第二件事,你想,如果你想提取不同類型從不同的網站的數據編寫不同的蜘蛛。