2012-10-09 137 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

你是正确的关于第二件事,你想,如果你想提取不同类型从不同的网站的数据编写不同的蜘蛛。