我第一次使用 Apache Nutch。爬取后如何将数据存储到 MySQL 数据库中?我希望能够轻松地在其他 Web 应用程序中使用这些数据。
我发现了一个相关的问题,但我不清楚代码 id 的哪一部分将被 MySQL 连接器替换。请帮助提供一个简短的代码示例。
从http://mirror.nyi.net/apache//nutch/apache-nutch-1.2-src.zip获取源码
在您的编辑器中打开org.apache.nutch.crawl.Crawl
课程。
查找变量Path crawlDb = new Path(dir + "/crawldb");
该变量将提示在何处替换代码以获得您自己的CustomMySQLCrawl
类。
在此调用期间发生持久性:crawlDbTool.update(crawlDb, segs, true, true); // update crawldb
因此您应该将其保存到数据库中。此时您可能需要考虑集成 hibernate。
如果您将使用 Nutch 的二进制可执行文件,请在抓取后运行 -readseg 命令。它会给你一个巨大的文件,其中包含所有原始 html 和其他信息。之后,您可以解析所需的数据并将其保存到数据库中。
如果您愿意在 Eclipse 中运行 Nutch,您应该向 Fetcher 类添加一些代码。
pstatus = output(fit.url, fit.datum, content, status, CrawlDatum.STATUS_FETCH_SUCCESS);
updateStatus(content.getContent().length);
在 Fetcher 类中的这些行之后编写一个简单的调用并写入数据库代码。您可以通过以下方式获取原始 html:
content.getContent();
这将返回 html 文件的字节数组表示,将其转换为字符串并将其保存到您的数据库中。您可能会遇到字符编码问题:使用 UTF-8配置 Nutch 的 Nutch。但是,这个问题一般是由 Eclipse 的编码引起的。为了克服这个问题,获取包含“charset”值的内容的子字符串,并且:
String yourContent = new String(content.getContent, encodingYouFound);
这里的“编码”是一个字符串,因此从“内容”中检索它就足够了。如果不能,某些站点可能没有 charset 属性,请使用通用编码,例如 UTF-8。
我看到了 2 种可能性:要么您从 Nutch 在爬网作业结束时创建的 Lucene 索引中获取内容(我认为它在 Nutch 2.0 中被删除),要么在每次迭代时从段中获取数据。
如果 Lucene 索引中的内容对您来说足够了,那么这样可能会更容易。但如果您需要更多,每个片段都包含 Nutch 获取的所有内容。