我有一个wikipedia网址,我想使用wiki API从该页面和其他引用页面加载高达30000个文档的内容,我可以循环访问网址并执行此操作,但这不是一种有效的方法。有没有其他方法可以实现这一点。我需要这个在hadoop中填充我的HDFS。
答案 0 :(得分:1)
您可以下载维基媒体软件和数据库图像,设置维基百科并在本地访问它。这是很好的描述,应该比通过网络请求该页数更有效。见:http://www.igeek.co.za/2009/10/16/how-to-mirror-wikipedia/
还有许多其他来源和预处理页面。以下是您计划在下一步中对内容做些什么的问题。
答案 1 :(得分:1)
有几种方法可以解决这个问题。 Toolserver个用户可以直接访问所有元数据,但不能访问文本。如果这适合您,您可以ask one of them to run a query通过query service。这是一种非常简单的方法,可以找出链接的页面等,并构建页面ID或修订ID的地图。
否则,请查看适用于批量处理的database dumps,但会对您进行一些处理。
最后,维基百科用于大量机器人和API擦除。它并不理想,但如果没有其他适合你的话,那就运行一个计时器,每秒开始一次新查询,你将在8小时内完成。
答案 2 :(得分:0)
正如Jeff和NilsB所说,你有一个错误的意图来抓取维基百科以填补你的HDFS。正确的做法是将整个wiki作为单个文件下载并加载到HDFS。
但是,如果我们从你的问题中抽象出一些细节,那么它会变得更加通用:如何使用Hadoop抓取url指定的某些网站?
所以答案是你应该将带有url的文件上传到hdfs,编写一个mapper(接受url,下载页面并将其设置为key=url
和value=page's body
)并配置一个Job使用NLineInputFormat来控制每个mapper将处理的url计数。
通过控制该参数,您将能够通过自身控制并行度,并计算地图槽数。