因为需要爬取数据,所以自己造了个轮子现在把整体框架结构以及要点阐述一下:
1、使用工具
使用了httpclient 4.5进行作为抓取工具而html解析使用JSOUP。
2、整体思路
爬虫的抓取策略要么是用延长时间来躲避追查,要么是用大量的代理IP来躲避追查。由于我的请求数量非常大所以只能用代理IP进行请求。所以首先你需要获得大量的代理池。
代理池的获取方式通过:1 去各大网站爬去免费代理,注意时间爬取限制。他们允许你抓取但是时间要放缓,否则会给你警告的。免费代理IP我用过的网站有西刺代理、快代理。但是要注意免费代理的成功率一般不高。我的感觉能到20%就是烧高香了。据此虽然说他们的付费服务标榜很高我也没买。2:自己扫描IP(看过没实践)。
3、架构设计
由于需要同一时间段爬去大量数据,所以结构如上图。多线程抓取类共享一个代理工具类。通过代理工具类获得代理IP。共享方式为抓取类(Crawler类)采用实现runnable接口实现。将一个ProxyUtil对象传入每个抓取类中即可。对于Httpclient类的使用它是线程安全的。但是因为多继承需要将其放入线程池中。但是httpclient由于需要进行多次更换url 具体参见
如果是连接中保持长连接,有可能出现链接终端等问题,别忘了中断链接(httpget.abort())。同时别忘了如果连接上时间不放需要
http.conn-manager.timeout参数来抛出异常。
4、评分机制
代理IP可以在读取时根据情况给予一个分值录入到数据库中。
代码还在不断优化暂时不放上来了,这如有问题望不吝赐教。