首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Dmoz ODP获取URL

如何从Dmoz ODP获取URL
EN

Stack Overflow用户
提问于 2009-12-24 12:50:22
回答 3查看 2.4K关注 0票数 0

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

编辑:

是否有任何脚本/代码来解析rdf文件。

EN

回答 3

Stack Overflow用户

发布于 2010-01-17 18:24:59

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

前几天我使用Steve's Softwareodp2db脚本做到了这一点。它们是旧的,但格式没有明显的变化,所以它们工作得很好。

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

加上我使用的2009年1月中旬的转储,有756,962个类别和4,436,796个网站。我花了一段时间把它们都看了一遍,但并不是太长,尽管我确实省去了网站的描述,因为我不需要它们。此外,可能值得在创建表之后添加数据库索引,以便稍后加快访问速度。原始结构和内容文件分别压缩75MB和300MB。848MB和2 2GB。

票数 4
EN

Stack Overflow用户

发布于 2010-02-12 15:45:13

我实际上用java做过这件事。我只是使用SAX API来读取RDF文件。这是非常直接的。在我的例子中,我想拉出主题名称中包含"Weblogs“的每个URL。

基本上所做的就是实现一个org.xml.sax.helpers.DefaultHandler

然后要设置代码,请执行以下操作:

代码语言:javascript
复制
       InputSource is = new InputSource(new FileInputStream("filename.rdf"));
       XMLReader r = XMLReaderFactory.createXMLReader();
       r.setContentHandler(new MyHandlerClass());
       r.parse(is);

差不多就是这样了。在我的处理程序类中,我必须实现:

然后我有一个if语句来查看它是否是一个"ExternalPage“标签,在这种情况下,我转到另一个状态来查找"topic”、"Title“和"Description”。我有另一个

  • characters(char[] ch, int start, int length),我在其中读取主题、标题和描述文本,这取决于最近发送给startElement

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

整个过程需要80-90行代码来进行基本的解析。所以写起来很容易。它能够在...中处理几十亿字节的文件我不记得有一两分钟了吗?如果您只想查询出一些特定的数据,那么在您的处理程序中编写代码来完成这项工作可能比试图将其加载到DB中要容易得多。

如果你找到了一个运行良好的工具,那显然比编写你自己的代码要好。但是编写你自己的代码并不难!RDF只是一种XML格式,它不是嵌套的。一个简单的SAX解析器很容易在一天左右的时间内完成。

票数 2
EN

Stack Overflow用户

发布于 2010-02-10 18:06:27

你可以随时付钱给那里的某个粗鲁的编辑,他们会帮你:)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1956735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档