1.项目架构

爬虫项目总结

2.详细技术点

1.解析,(依赖注入)

2,使用queue队列实现循环抓取

3.实现优先级队列并提取接口

4.使用log4j实现配置检查及日志打印

5.实现多线程爬虫并提取接口

6.实现url调度器

7.使用queue队列实现url随机榨取

8.使用redis队列实现url 随机抓取

10.使用httpclient 实现模拟登录

11.使用curator 监控爬虫的生命周期

12.建立索引在web页面展示

3.定时插入入口url

爬虫项目总结

 

4.项目部署

redis solr hbase zookeeper

redis:主从结构,一主一从

solr:前期使用主从,后期由于数据增多,使用solrcloud(四个节点)

hbase:集群(五个节点)

zookeeper:集群(三-五个节点)

 

爬虫程序部署(spider.jar)

spider爬虫需要部署在多个节点上面,具体多少要根据数据量而定。

spider中现在一个包含4个入口类

     1.spider:这个进程需要在每台服务器上运行

      2.urlmanager:这个进程只需要在一台服务器上执行

      3.spiderwatcher:这个进程只需要在一台服务器上执行

      4.solrindex:这个进程只需要在一台服务器上执行

 

比价项目的web平台

    一个节点启动web程序即可。

5.京东数据量以及爬取时间

京东的数据量:
举例子:数码分类一共2074页,每页60个商品
2074*60=124440个商品

京东里面一共有9个分类,每个分类可能商品数量不一致,在这里由于我们没有爬取所有的数据,所以计算一个估计值。

124440*9=1119960(一百多万条数据)
平均下载一个页面需要100毫秒
1119960*0.1秒=31小时

注意:一般一个页面是100-200K左右,京东的页面一个是200K左右
1119960*200/1024/1024=213G

单线程的话就需要31小时,

假设部署5个节点,每个节点启动10个线程
这样的话就相当于有50个线程进行抓取
31/50=0.6小时=37分钟

但是还需要计算上爬取间隔时间,
假设是5秒的话
就是1119960*5秒=1555小时
1555/50=31小时
这样的话一天都爬取不完,这样的话就还要加节点

增加到10个节点,每个节点10个线程
1555/100=15小时

 

6.爬虫项目的问题

1:频繁抓取网站Ip被封

解决方案:需要一个代理IP库,定时更换代理Ip爬取网站,在爬取网站的时候可以设置一个睡眠时间,让爬虫的速度慢一点。
        Ip库,可以在网站搜集一些免费的,或者花钱买一些代理Ip。

 

2.针对抓取失败url如何处理,可能由于网络原因,第一次抓取失败,第二次再抓取就成功了。

       1:设置重试机制,如果url抓取失败,则把这个url放回到url队列中,重复三次,如果还是失败,则认为是无效链接。
        这样的话实现比较麻烦,需要把这个失败的url在sorted set集合中记录一下,把每个元素的分值当成重试的次数,
        大于三次的话就不把这个url放倒url链接库了。
        2:在这里我们直接使用httpclient的默认重试机制,默认三次,这样就可以了   

3.抓取的网站模版会不定期的变动

把提取关键信息的表达式提取出来,保存到数据库中,每一个网站一套规则,不能写死在项目中,不然只要抓取的网站版本稍微变动就要重新修改发布项目。
   

 

4.抓取网站遇到的问题

有很多网站都会有一些反爬策略
大部分都是需要校验useragent信息

5:代理Ip价格

参考:1元4000个
        9元包天

7.整体数据流程

爬虫项目总结

8.项目部署关键点

在spider_web下运行solrIndex 建立索引

然后部署web项目,然后就可以访问了。