避免爬虫循环和重复的技巧
规范化URL
将URL转换为标准形式以避免语法上的别名
使用广度优先的爬行
每次爬虫都有大量存在的URL去爬行。以广度优先方式调度URL访问可以将把连接环路的影响最小化。即使遇到了机器人陷阱,在进入环路之前已经获取了成百上千页面。如果使用深度优先方法,可能会一头扎到单一网站中进入URL环路,无端消耗资源。
节流
限制一段时间内从某一个WEB站点获取的页面数,减小进入环路带来的浪费。
限制URL大小
限制爬行超过特定长度的URL,以终结环路。
但是这样会错过一些内容,有的公司会把超长的用户ID或Token直接放到Query String中
站点黑名单
维护一个机器人环路和陷阱对应的已知站点的URL列表,然后爬行时避开,遇到新问题URL时添加到黑名单。
模式检测
例如把重复组件URL当中潜在环路,拒绝爬行有一定数量组件重复的URL。
重复不一定是连续的。
内容指纹
对获取页面内容中的字节进行校验和检验。
因为两个页面出现相同内容机率十分低,所以要对校验和函数进行选择,MD5报文摘要函数常用于内容指纹计算。
人工监视
对爬虫日志进行人工监视。
搜索引擎
搜索引擎广泛使用Web机器人(爬虫)技术,搜索到的内容都是爬虫得到的缓存或快照
全文索引
全文索引就是一个数据库,给他一个单词,他就能立即提供包含此单词的文档。
欺诈
很多网站为了再相关性排序中获得较前的位置,会为网站中加许多无关数字,甚至使用网关应用生成一些某些特定单词上可以更好地欺骗搜索引擎相关性算法的假冒页面