• 一个大规模爬虫的抓取实例


    http://www.michaelnielsen.org/ddi/how-to-crawl-a-quarter-billion-webpages-in-40-hours/

    一个大规模爬虫的抓取实例

    本文是一篇大规模爬虫的文章的阅读笔记,记录了一个作者利用amazon集群在40个小时的时间里爬取2.5亿个网页的过程。

    相关参数

    page:2.5亿

    cost:580 dollar

    time:40 hours

    machine:20 Amazon EC2

    storage:总共抓取了1.69 TB

    目的:

             找到一个有用的网络子集,实践爬虫和分布式计算

    技术实现:

             分布式爬虫

    节点:Amazon EC2

    集群控制:Fabric

    语言:Python

     

    爬取方式:

    1)每个集群141个爬虫线程,从Alexa白名单[1]得到初始域名

                      选择141个是根据实验效果达到饱和确定的

    2)  任务分配:哈希分配机器、哈希分配线程;

    3)

    从alexa开始,对每个网页抓取;

    舍弃抓取的external link,其他的加入url frontier;

    在url frontier中取出url,继续抓取;

    log记录

    问题:

    1.url去重:大规模爬虫遇到的常见问题,可以用Bloom Filter(布隆过滤器)的库pybloomfiltermmap和redis,但是可能造成错误判断而舍弃应该抓取的url;redis的作用是存储为url设置的键值,其键-值为(url-下一次应抓取时间),这是为了遵循为了抓取的道德准则,避免对网站造成压力

            

    2. 1)可预见的bug和不可预见的bug,如不规范的html。一般舍弃。解析页面一般用python的lxml库。

        2)去除外链会导致一些不规则的子域名不能被加入爬取的流程,group.barclays.com

    barclays.com的子域名;解决方法是tldextract library;

    3. 同时抽取多个域名加入列表会导致流量负担,姑且称作clump problem;

    解决方法是用单机的url frontier来代替全局的url frontier

    4. url的存储方式遇到去重的问题,每个线程会消耗大量空间;

    5. 分配线程跟机器的hash要用两个独立的函数或者用一个

    6. 截断:因为有些html页面太大,需要截断。可以用网络的页面平均大小来估计应该截断的合理值,最后确定是200kb。

    其他

             进行爬取用到的相关价格:价格:512 dollars,节点 EC2,500 gigabytes,

             Spot-instance:竞价实例是亚马逊出卖自己闲置资源的一种方式,出价高的拥有实例,价格比较划算。它可能是同样计算能力的实例价格的1/10。这是一个让人惊讶的数字。它的实体在13年底就估计达到了300万台。但是竞价实例可以随时被亚马逊回收。

            threaded architecture和evented architecture是有区别的。本文采用的是threaded architecture。即:多线程爬虫跟异步爬虫的区别。

    注:

    [1]    Alexa是一个亚马逊的子公司,用来发布网站的世界排名。可以通过该网站找到前100万的网址。

    [2]    该爬虫可能会给单一站点带来很大的流量负担,所以为了防止被一些人轻率地滥用,作者无限期推迟发布代码(也即不发布)。

  • 相关阅读:
    asp.net mvc 两级分类联动方法示例
    动手实践虚拟网络
    KVM 网络虚拟化基础
    LVM 类型的 Storage Pool
    KVM 存储虚拟化
    CPU 和内存虚拟化原理
    远程管理 KVM 虚机
    启动第一个 KVM 虚机
    准备 KVM 实验环境
    虚拟化
  • 原文地址:https://www.cnblogs.com/wangzming/p/7388704.html
Copyright © 2020-2023  润新知