我想搜集很多(几百个)网站,基本上都像公告板。其中一些规模非常大(高达150万),而且增长非常迅速。我想达到的目标是:
为此,我们使用scrapy并将项目保存在postresql数据库中。现在的问题是,我如何确保我得到了所有的记录,而不必每次都刮去整个网站?(这对交通来说不是很拥挤,但也不可能在1小时内完成。)
例如:我有一个网站,有100页,每10条记录。所以我刮了第一页,然后转到第二页。但是在快速增长的网站上,当我请求第2页时,可能会有10个新记录,所以我会再次得到相同的项目。尽管如此,我最终还是会得到所有的东西。但是下一次抓取这个网站时,我怎么知道该停在哪里?我不能停在数据库中已有的第一条记录,因为这可能会突然出现在第一页上,因为有一个新的答复。在
太长了,读不下去了,我不知道我是不是已经得到了我的观点,但是TL;DR:如何以渐进的方式获取快速增长的BBS?所以在获取所有记录的同时,每次只获取新记录。我查看了scrapy的resume函数和scratingubs deltafetch中间件,但我不知道它们是否(以及如何)帮助解决这个问题。在
通常每个记录都有一个唯一的链接(permalink),例如,只需输入
https://stackoverflow.com/questions/39805237/
&忽略除此之外的文本即可访问上述问题。你必须为每一条记录存储唯一的URL,当你下次进行抓取时,忽略你已经拥有的那些。在如果您以Stackoverflow上的标记
python
为例,您可以在这里查看问题:https://stackoverflow.com/questions/tagged/python
,但是不能依赖排序顺序来确保条目的唯一性。其中一种方法是根据最新的问题进行排序,并根据URL忽略重复的问题。在你可以有一个算法,每“x”分钟刮一次前“n”页,直到它碰到现有记录为止。整个流程有点特定于站点,但是随着您获取更多站点,您的算法将变得更加通用和健壮,以处理边缘情况和新站点。在
另一种方法是不自己运行scrapy,而是使用分布式spider服务。它们通常有多个IP,可以在几分钟内搜索大型站点。只要确保你尊重网站的机器人.txt归档,不要意外地对它们进行DDoS攻击。在
相关问题 更多 >
编程相关推荐