【问题标题】:Nutch - clone websiteNutch - 克隆网站
【发布时间】:2015-10-26 19:54:54
【问题描述】:

我正在使用 Apache Nutch,并且我正在成功爬取一个网站。我想用 Nutch 克隆一个网站,这样我就可以离线访问爬取的网页。有没有办法做到这一点?我正在寻找类似端点的东西,它接收一个 url 并返回网页的内容,就好像我正在使用 curl 获取 url。

我知道有更专业的解决方案,例如HTTrack,但我想知道是否可以使用 Nutch 来做到这一点。

【问题讨论】:

    标签: web-scraping web-crawler nutch


    【解决方案1】:

    我认为你现在不需要这个,但无论如何我都会给出我的答案。当然可以使用 Apache Nutch。在注入种子 url 并生成要获取的 url 段之后,当您执行 fetch 命令时 -

    $ bin/nutch fetch -all
    

    Hbase(使用Hbase作为Nutch的存储非常常规)webpage表结构会是这样的-

    webpage : {
      key : "com.exampe.dev:http/",
      f : {
        bas : {
          timestamp : 1293732801833, 
          value : "http://dev.example.com/" 
        },
        cnt : {
          timestamp : 1293732801833, 
          value : "DOCTYPE html PUBLIC "-//W3C//DTD X...rest of page content" 
        },
        fi : {
          timestamp : 1293676557658,
          value : "\x00'\x8D\x00" 
        },
        prot : {
          timestamp : 1293732801833, 
          value : "x02\x00\x00" 
        },
        st : {
          timestamp : 1293732801833, 
          value : "x00\x00\x00\x02" 
        },
        ts : {
          timestamp : 1293676557658,
          value : "\x00\x00\x01-5!\x9D\xE5" 
        }
        typ : {
          timestamp : 1293732801833, 
          value : "application/xhtml+xml" 
        }
      },
      h : {
        Cache-Control : {
          timestamp : 1293732801833, 
          value : "private" 
        },
        Content-Type : {
          timestamp : 1293732801833, 
          value : "text/html; charset=UTF-8" 
        },
        Date : {
          timestamp : 1293732801833, 
          value : "Thu, 30 Dec 2010 18:13:21 GMT" 
        },
        ETag : {
          timestamp : 1293732801833, 
          value : 40bdf8b9-8c0a-477e-9ee4-b19995601dde" 
        },
        Expires : {
          timestamp : 1293732801833, 
          value : "Thu, 30 Dec 2010 18:13:21 GMT" 
        },
        Last-Modified : {
          timestamp : 1293732801833, 
          value : "Thu, 30 Dec 2010 15:01:20 GMT" 
        },
        Server : {
          timestamp : 1293732801833, 
          value : "GSE" 
        },
        Set-Cookie : {
          timestamp : 1293732801833, 
          value : "blogger_TID=130c0c57a66d0704;HttpOnly" 
        },
        X-Content-Type-Options : {
          timestamp : 1293732801833, 
          value : "nosniff" 
        },
        X-XSS-Protection : {
          timestamp : 1293732801833, 
          value : "1; mode=block" 
        }
      },
      mk : {
        _injmrk_ : {
          timestamp : 1293676557658, 
          value : "y" 
        },
        _gnmrk_ : {
          timestamp=1293732629430, 
          value : "1293732622-2092819984" 
        },
        _ftcmrk_ : {
          timestamp : 1293732801833, 
          value : "1293732622-2092819984" 
        }
      },
      mtdt : {
        _csh_ : {
          timestamp : 1293676557658, 
          value : "x80\x00\x00" 
        }
      },
      s : {
        s : {
          timestamp : 1293676557658, 
          value : "x80\x00\x00" 
        }
      }
    }
    

    f 列族下名为 cnt 的列将包含您页面的整个 html 内容。所以你显然可以使用它来克隆页面。

    此外,您可以编写实现ParserParseFilter 接口的自定义插件来捕获页面的全部内容。代码将非常简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-25
      • 2017-08-15
      • 2020-08-25
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      相关资源
      最近更新 更多