网页去重解决方案
1.指纹码对比
最常见的去重方案是生成文档的指纹门。例如对一篇文章进行MD5加密生成一个字符串,我们可以认为这是文章的指纹码,再和其他的文章指纹码对比,一致则说明文章重复。但是这种方式是完全一致则是重复的,如果文章只是多了几个标点符号,那仍旧被认为是重复的,这种方式并不合理。
2.BloomFilter
这种方式就是我们之前对url进行去重的方式,使用在这里的话,也是对文章进行计算得到一个数,再进行对比,缺点和方法1是一样的,如果只有一点点不一样,也会认为不重复,这种方式不合理。
3.KMP算法
KMP算法是一种改进的字符串匹配算法。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。能够找到两个文章有哪些是一样的,哪些不一样。这种方式能够解决前面两个方式的“只要一点不一样就是不重复”的问题。但是它的时空复杂度太高了,不适合大数据量的重复比对。
4.SimHash算法
生成simhash签名,通过海明距离计算文章相似度
使用方式:https://github.com/wolf457635210/SimHasheRepository下载maven工程,安装到本地maven仓库
<dependency>
<groupId>com.lou</groupId>
<artifactId>simhasher</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
//1.生成simhash签名
SimHasher hash = new SimHasher(String content);
//2.打印simhash签名
BigInteger signature = hash.getSignature();
//3.计算海明距离
int HammingDistance = hash.getHammingDistance(hash2.getSignature());
反爬虫解决方案
代理服务器:
客户端首先与代理服务器创建连接,接着根据代理服务器所使用的代理协议,请求对目标服务器创建连接、或者获得目标服务器的指定资源。如果代理服务器被目标服务器列入黑名单,可以继续更换另外一台代理服务器
免费代理服务器:
米扑代理
https://proxy.mimvp.com/free.php
西刺免费代理IP
http://www.xicidaili.com/
代理服务器的使用:
//1.设置代理服务器
HttpClientDownloader downloader = new HttpClientDownloader();
downloader.setProxyProvider(SimpleProxyProvider.from(new Proxy("代理服务器IP","代理服务器端口")));
//2.Spider绑定代理服务器
Spider.create(new JobProcessor())
.addUrl("http://www.baidu.com")
.setDownloader(downloader)
.run();