我想在我的应用程序中使用DMOZ ODP中存在的URL数据库。 (URL字符串数组或包含该字符串的文件)。有没有办法获得它(手动复制粘贴除外)?
编辑:
是否有任何脚本/代码可以解析rdf文件..
答案 0 :(得分:4)
看看http://rdf.dmoz.org/,您需要找到一种方法将RDF解析到您的数据库中。
我前几天使用odp2db中的Steve's Software脚本执行了此操作。它们很旧,但格式没有显着改变,所以它们工作正常。
我发现我不需要执行自述文件中建议的iconv
和xmlclean.pl
步骤,只需解压缩转储并运行structure2db.pl
和content2db.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)
您可以随时向其中一位腐败的编辑付款,他们会帮助您:)