zoukankan      html  css  js  c++  java
  • 爬虫项目总结

    1.项目架构

    image

    2.详细技术点

    1.解析,(依赖注入)

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

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

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

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

    6.实现url调度器

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

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

    10.使用httpclient 实现模拟登录

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

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

    3.定时插入入口url

    image

    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.整体数据流程

    QQ图片20150920151925

    8.项目部署关键点

    在spider_web下运行solrIndex 建立索引

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

  • 相关阅读:
    第15章 RCC—使用HSE/HSI配置时钟—零死角玩转STM32-F429系列
    第14章 启动文件详解—零死角玩转STM32-F429系列
    第13章 GPIO-位带操作—零死角玩转STM32-F429系列
    第12章 GPIO输入-按键检测—零死角玩转STM32-F429系列
    使用Vmware过程中,突然网络连接不上问题
    Yaf自定义autoload以实现Model文件和Controller文件命名区分
    Yaf学习过程中遇到的问题小记
    网页出现横向滚动条的原因可能是使用bootstrap不当引起
    微信小程序开发(一)
    nginx 启动报错找不到nginx.pid文件
  • 原文地址:https://www.cnblogs.com/chaoren399/p/4822296.html
Copyright © 2011-2022 走看看