首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Apache Nutch保存原始html文件

如何使用Apache Nutch保存原始html文件
EN

Stack Overflow用户
提问于 2012-04-04 16:06:35
回答 5查看 5.7K关注 0票数 5

我是搜索引擎和网络爬虫的新手。现在,我希望将特定网站中的所有原始页面存储为html文件,但使用Apache Nutch只能获得二进制数据库文件。如何使用Nutch获取原始html文件?

Nutch支持它吗?如果没有,我可以使用哪些其他工具来实现我的目标。(支持分布式爬行的工具更好。)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-08 11:30:27

nutch会把抓取的数据写成二进制格式,所以如果你想把它保存成html格式,你必须修改代码。(如果您是nutch新手,这将是痛苦的)。

如果您希望快速轻松地获取html页面,请执行以下操作:

  1. 如果您想要的页面/url列表非常少,那么最好使用为每个url调用wget的脚本来完成。
  2. 或使用HTTrack工具。

编辑:

写一个你自己的nutch插件会很棒。你的问题将得到解决,另外你可以通过提交你的作品来为nutch做出贡献!如果你是nutch的新手(在代码和设计方面),那么你将不得不投入大量时间来构建一个新的插件……否则就很容易做到。

对你的计划有帮助的几点建议:

Here是一个谈论编写自己的nutch插件的页面。

Fetcher.java开始。参见第647-648行。这是一个地方,在这里你可以获取基于每个url的获取内容(对于那些成功获取的页面)。

代码语言:javascript
运行
复制
pstatus = output(fit.url, fit.datum, content, status, CrawlDatum.STATUS_FETCH_SUCCESS);
updateStatus(content.getContent().length);

你应该在这之后添加代码来调用你的插件。将content对象传递给它。到目前为止,你可能已经猜到content.getContent()是你想要的url的内容。在插件代码中,将其写入某个文件。文件名应该基于url名称,否则将很难使用它。Url可以通过fit.url获取。

票数 9
EN

Stack Overflow用户

发布于 2012-04-20 19:01:57

您必须在run in 中进行修改。

当您能够运行时,打开Fetcher.java并在"content saver“命令行之间添加行。

代码语言:javascript
运行
复制
case ProtocolStatus.SUCCESS:        // got a page
            pstatus = output(fit.url, fit.datum, content, status, CrawlDatum.STATUS_FETCH_SUCCESS, fit.outlinkDepth);
            updateStatus(content.getContent().length);'


            //------------------------------------------- content saver ---------------------------------------------\\
            String filename = "savedsites//" + content.getUrl().replace('/', '-');  

            File file = new File(filename);
            file.getParentFile().mkdirs();
            boolean exist = file.createNewFile();
            if (!exist) {
                System.out.println("File exists.");
            } else {
                FileWriter fstream = new FileWriter(file);
                BufferedWriter out = new BufferedWriter(fstream);
                out.write(content.toString().substring(content.toString().indexOf("<!DOCTYPE html")));
                out.close();
                System.out.println("File created successfully.");
            }
            //------------------------------------------- content saver ---------------------------------------------\\
票数 6
EN

Stack Overflow用户

发布于 2013-10-09 22:16:23

要更新此答案,请-

可以对crawldb segment文件夹中的数据进行后期处理,并直接读取html (包括nutch存储的其他数据)。

代码语言:javascript
运行
复制
    Configuration conf = NutchConfiguration.create();
    FileSystem fs = FileSystem.get(conf);

    Path file = new Path(segment, Content.DIR_NAME + "/part-00000/data");
    SequenceFile.Reader reader = new SequenceFile.Reader(fs, file, conf);

    try
    {
            Text key = new Text();
            Content content = new Content();

            while (reader.next(key, content)) 
            {
                    System.out.println(new String(content.GetContent()));
            }
    }
    catch (Exception e)
    {

    }
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10007178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档