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项目,然后就可以访问了。