2011-05-26 62 views
0

我得到了一个有趣的小项目灵感来自今日的xkcd工具提示。 基本上,前提是对于任何维基百科文章,如果您一次又一次地遵循第一个链接(不在括号内或斜体内),最终您将看到哲学文章。网络爬虫类型程序 - 维基度分离

我正在尝试编写一个基本上随机选择一个维基百科页面的程序(可能使用http://en.wikipedia.org/wiki/Special:Random网址),然后确定页面来自哲学的“深度”。

我用C语言(我最熟悉的语言)打开了一个程序,为了让计划顺利并迅速实现,除了两个“次要”(又名重要位)问题之外,我知道如何去做大部分工作:

char *grab_first_link(page, int n){ 
    //return url of 1st link not in italics or inside parentheses 
} 

void get_random_page{ 
    //go to http://en.wikipedia.org/wiki/Special:Random 
    //wait 2 seconds 
    //return the URL generated by the random page 
} 

所以基本上我正在寻找一个图书馆,可以帮助简单的HTML页面。以及如何根据上述规则获得正确链接的一些提示。

(还 - 我肯定有一百万+ 1的方式来更有效地做到这一点/容易,我只是好奇,如果我能得到这一切/大都用C完成)

感谢您的帮助,提示,链接或点在正确的方向。

+0

感谢编辑我永远无法得到的代码标记工作... – tomatosource 2011-05-27 01:46:50

回答

1
  1. 找到一个HTML解析器库(libxml2可以完成这个工作)并阅读它的手册。 XPath可能会成为你的朋友。
  2. 查找HTTP客户端库(并阅读其说明书),然后看1
+0

对于任何人,颠簸到这一点,我最后使用libcurl和几个简单的获取,并截断原始的html给我下一个链接。 – tomatosource 2011-07-13 14:11:31

1

我对任何在维基百科上工作的程序的建议:不要使用HTML;相反,解析SQL dump,特别是链接表。在我的Wikiassoc程序中有一个link table parser(在C++中,不是C)。