2015/7/13 下午12:06:19 星期一
当前位置: 主页 > 平步青云 >

手把手教你搭建一个365体育:基于Java的分布式爬虫系统
时间:2019-05-31 20:27

摘要:“在不用爬虫框架的情况下,我经过多方学习,365在线体育投注,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL、HBase等。因为此系统基于面向接口的编码思想来开发,所以具有一定的扩展性,有兴趣的朋友直接看一下代码,就能理解其设计思想。虽然代码目前来说很多地方还是比较紧耦合,但只要花些时间和精力,

调度器属于 URL 调度系统)

582758......

Map IPProxyRepository = {    InputStream in = HttpUtil.class.getClassLoader().getResourceAsStream(HttpHost {    {    {    ; }

{    ...... }{    ...... }{    commentCount;        ;(  armscii8 ,  ,  ,  ,  ,  ,  ,  ,  ,  PRIMARY =utf8;

, phone seconds

{    ; }

{    {        String sql =

{    ;    ; }

{    {        Jedis jedis = JedisUtil.getJedis();        Set domains = jedis.smembers(SpiderConstants.SPIDER_WEBSITE_DOMAINS_KEY);        String higherUrlKey;        String lowerUrlKey;        {        offerUrl(highUrl, SpiderConstants.SPIDER_DOMAIN_HIGHER_SUFFIX);    }    {        offerUrl(lowUrl, SpiderConstants.SPIDER_DOMAIN_LOWER_SUFFIX);    }    {        Jedis jedis = JedisUtil.getJedis();        String domain = SpiderUtil.getTopDomain(url);   {    JobExecutionException {        {    {        {        UrlJobScheduler urlJobScheduler = {        

[zk: localhost:2181(CONNECTED) 1] create /ispider ispider Created /ispider

{    String zkStr =

{    

邮件发送模块

jd.com Current suning.com Current jd.com Current jd.com Current jd.com Current jd.com Current jd.com Current jd.com Current jd.com Current jd.com Current suning.com Current suning.com                

通过日志分析爬虫系统的性能

在我们的爬虫系统中,每个关键的地方,如网页下载、数据解析等都是有打 logger 的,所以通过日志,可以大概分析出相关的时间参数。

2018-04-01 21:26:03 [pool-1-thread-1] [cn.xpleaf.spider.utils.HttpUtil] [INFO] - 下载网页:https://list.jd.com/list.html?cat=9987,653,655&page=1,消耗时长:590 ms,代理信息:null:null 2018-04-01 21:26:03 [pool-1-thread-1] [cn.xpleaf.spider.core.parser.Impl.JDHtmlParserImpl] [INFO] - 解析列表页面:https://list.jd.com/list.html?cat=9987,653,655&page=1, 消耗时长:46ms 2018-04-01 21:26:03 [pool-1-thread-3] [cn.xpleaf.spider.core.parser.Impl.SNHtmlParserImpl] [INFO] - 解析列表页面:https://list.suning.com/0-20006-0.html, 消耗时长:49ms 2018-04-01 21:26:04 [pool-1-thread-5] [cn.xpleaf.spider.utils.HttpUtil] [INFO] - 下载网页:https://item.jd.com/6737464.html,消耗时长:219 ms,代理信息:null:null 2018-04-01 21:26:04 [pool-1-thread-2] [cn.xpleaf.spider.utils.HttpUtil] [INFO] - 下载网页:https://list.jd.com/list.html?cat=9987,653,655&page=2&sort=sort_rank_asc&trans=1&JL=6_0_0,消耗时长:276 ms,代理信息:null:null 2018-04-01 21:26:04 [pool-1-thread-4] [cn.xpleaf.spider.utils.HttpUtil] [INFO] - 下载网页:https://list.suning.com/0-20006-99.html,消耗时长:300 ms,代理信息:null:null 2018-04-01 21:26:04 [pool-1-thread-4] [cn.xpleaf.spider.core.parser.Impl.SNHtmlParserImpl] [INFO] - 解析列表页面:https://list.suning.com/0-20006-99.html, 消耗时长:4ms ...... 2018-04-01 21:27:49 [pool-1-thread-3] [cn.xpleaf.spider.utils.HttpUtil] [INFO] - 下载网页:https://club.jd.com/comment/productCommentSummaries.action?referenceIds=23934388891,消耗时长:176 ms,代理信息:null:null 2018-04-01 21:27:49 [pool-1-thread-3] [cn.xpleaf.spider.core.parser.Impl.JDHtmlParserImpl] [INFO] - 解析商品页面:https://item.jd.com/23934388891.html, 消耗时长:413ms 2018-04-01 21:27:49 [pool-1-thread-2] [cn.xpleaf.spider.utils.HttpUtil] [INFO] - 下载网页:https://review.suning.com/ajax/review_satisfy/general-00000000010017793337-0070079092-----satisfy.htm,消耗时长:308 ms,代理信息:null:null 2018-04-01 21:27:49 [pool-1-thread-2] [cn.xpleaf.spider.core.parser.Impl.SNHtmlParserImpl] [INFO] - 解析商品页面:https://product.suning.com/0070079092/10017793337.html, 消耗时长:588ms ......

平均下来,下载一个商品网页数据的时间在 200~500 毫秒不等,当然这个还需要取决于当时的网络情况。

另外,如果想要真正计算爬取一个商品的时间数据,可以通过日志下面的数据来计算:

在我的主机上(CPU:E5 10核心,内存:32GB,分别开启 1 个虚拟机和 3 个虚拟机),情况如下:

可以看到,当使用 3 个节点时,时间并不会相应地缩小为原来的 1/3,这是因为此时影响爬虫性能的问题主要是网络问题,节点数量多,线程数量大,网络请求也多。

但是带宽一定,并且在没有使用代理的情况,请求频繁,连接失败的情况也会增多,对时间也有一定的影响,如果使用随机代理库,情况将会好很多。

但可以肯定的是,在横向扩展增加爬虫节点之后,确实可以大大缩小我们的爬虫时间,这也是分布式爬虫系统的好处。

爬虫系统中使用的反反爬虫策略

在整个爬虫系统的设计中,主要使用下面的策略来达到反反爬虫的目的:

总结

需要说明的是,本系统是基于 Java 实现的,但个人觉得,语言本身依然不是问题,核心在于对整个系统的设计以及理解上。

写此文章是希望分享这样一种分布式爬虫系统的架构给大家,如果对源代码感兴趣,可以到我的 GitHub 上查看。

作者:叶泳豪

编辑:陶家龙、孙淑娟

代码地址:https://github.com/xpleaf/ispider

来源:

投稿:有投稿、寻求报道意向技术人请联络 editor@51cto.com

叶泳豪,大数据工程师,华为 HCIE-RS 认证工程师。曾就职于华为、网易等企业,目前专注于大数据领域的学习和研究。