如何从Dmoz ODP获取URL

时间:2009-12-24 04:50:22

标签: url dmoz

我想在我的应用程序中使用DMOZ ODP中存在的URL数据库。 (URL字符串数组或包含该字符串的文件)。有没有办法获得它(手动复制粘贴除外)?

编辑:

是否有任何脚本/代码可以解析rdf文件..

3 个答案:

答案 0 :(得分:4)

看看http://rdf.dmoz.org/,您需要找到一种方法将RDF解析到您的数据库中。

我前几天使用odp2db中的Steve's Software脚本执行了此操作。它们很旧,但格式没有显着改变,所以它们工作正常。

我发现我不需要执行自述文件中建议的iconvxmlclean.pl步骤,只需解压缩转储并运行structure2db.plcontent2db.pl脚本。您需要手动创建数据库表(请参阅脚本顶部的SQL)并在开始之前修改脚本中的连接详细信息。

随着我使用的2009年1月中旬转储,有756,962个类别和4,436,796个网站。它需要一段时间来贯穿它们,但不会过长,尽管我确实免除了网站描述,因为我不需要它们。此外,在创建表后可能值得添加数据库索引以加快以后的访问速度。原始结构和内容文件分别为75MB和300MB压缩。分别为848MB和2GB。

答案 1 :(得分:2)

我实际上已经在java中完成了这个。我刚刚使用SAX API来读取RDF文件。这很直接。在我的情况下,我想在主题名称中使用“Weblogs”提取主题中的每个URL。

基本上是做了org.xml.sax.helpers.DefaultHandler

然后设置您执行的代码:

       InputSource is = new InputSource(new FileInputStream("filename.rdf"));
       XMLReader r = XMLReaderFactory.createXMLReader();
       r.setContentHandler(new MyHandlerClass());
       r.parse(is);

这就是它。在我的处理程序类中,我必须实现:

  • startElement(String uri, String localName, String qName, Attributes attributes)然后我有一个if语句来查看它是否是“ExternalPage”标签,在这种情况下我去了另一个州查找“topic”,“Title”和“Description” 。我有另一个

  • characters(char[] ch, int start, int length)我在主题,标题和说明文字中读取的内容取决于最近发送到startElement的文本

  • endElement(String uri, String localName, String qName)我检查了哪个元素结束了,如果是ExternalPage,那意味着当前元素的结束。

整个过程是基本解析的80-90行代码。这么容易写。它能够通过几千兆字节的文件来咀嚼...我不记得可能一两分钟?如果您只想查询某些特定数据,可能更容易编写代码来在您的处理程序中执行此操作,而不是尝试将其加载到数据库中。

如果你找到一个运行良好的工具,那么显然比编写自己的代码更好。但编写自己的代码并不难! RDF只是一种XML格式,它不是嵌套的或任何东西。简单的SAX解析器在一天左右就可以轻松完成。

答案 2 :(得分:-1)

您可以随时向其中一位腐败的编辑付款,他们会帮助您:)