我试图用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
谢谢