我有一个 wikipedia url,我想使用 wiki API 从该页面和其他引用的页面加载最多 30000 个文档的内容,我可以遍历 url 并这样做,但这不是一种有效的方式。有没有其他方法可以实现这一点。我需要这个来在 hadoop 中填充我的 HDFS。
3 回答
有几种方法可以解决这个问题。Toolserver用户可以直接访问所有元数据,但不能访问文本。如果这适合您,您也许可以要求其中一个通过查询服务运行查询。这是一种非常直接的方法,可以找出链接了哪些页面等,并构建页面 id 或修订版 id 的映射。
否则,请查看非常适合批量工作的数据库转储,但最终需要进行一些处理。
最后,维基百科习惯于大量的机器人和API抓取。这并不理想,但如果没有其他适合您的情况,则运行一个计时器,每秒启动一次新查询,您将在 8 小时内完成。
您可以下载 wikimedia 软件和数据库图像,设置 wikipedia 并在本地访问它。这已经很好地描述了,并且应该比通过网络请求该数量的页面更有效。见:http ://www.igeek.co.za/2009/10/16/how-to-mirror-wikipedia/
还有许多其他来源和预处理页面。问题来了,您打算在下一步中对内容做什么。
正如 Jeff 和 NilsB 所说,你有一个错误的意图来爬取维基百科来填充你的 HDFS。正确的做法是将整个 wiki 下载为单个文件并将其加载到 HDFS。
但是,如果我们从您问题中的一些细节中抽象出来,它将转化为更笼统的:如何使用 Hadoop 抓取一些由 url 指定的站点?
所以答案是您应该将带有 url 的文件上传到 hdfs,编写一个映射器(接受 url,下载页面并将其生成为key=url
and value=page's body
)并配置一个作业以使用NLineInputFormat来控制每个映射器的 url 计数过程。通过控制该参数,您将能够通过自身和映射槽计数来控制并行度。