1

我试图用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 和规则,但是一旦蜘蛛运行,它们似乎没有响应。有没有办法在scrapy中做到这一点?

我的第二个问题是如何为不同的蜘蛛使用不同的管道。我在堆栈溢出时发现了一些东西。但似乎scrapy 不是为此而构建的,您似乎想为不同的站点创建一个新项目。

我是否使用了错误的工具来执行此操作?或者我错过了一些东西。我想过使用 mechanize 和 lxml 来做到这一点。但是我需要实现扭曲和 unicode 处理等等,这让我想坚持使用scrapy

谢谢

4

1 回答 1

1

您要求的是即时创建一个 http 请求。

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

如果要提交多个 http 请求,则返回一个数组。在 scrapy 中
查看此请求

第二件事你是对的,如果你想从不同的网站提取不同类型的数据,你应该编写不同的蜘蛛。

于 2012-10-09T22:08:15.057 回答