寻找维基百科文章之间的最短路径

时间:2014-11-05 21:19:11

标签: python web-crawler wiki wikipedia

我正在编写一个python网络爬虫来查找维基百科文章之间的路径。

我有一篇文章和一篇目标文章,我试图找到它们之间的短路径。

现在我基本上只是从开始到目标进行广泛搜索,并使用这样的代码。

 for link in to_crawl:
    links = get_all_links(source(link), crawled)
    if goal in links:
        return path+[link]+[goal]
    crawled.append(link)
    to_crawl.append(links)

如果距离只有几度,它会从一篇文章转到另一篇文章,但我需要一种方法来跟踪我所走的道路。

1 个答案:

答案 0 :(得分:0)

所以只需跟踪它。不是拥有链接列表,而是列出link, path对。像这样:

to_crawl = [(start_page, [])]
for link, path in to_crawl:
    links = get_all_links(source(link), crawled)
    if goal in links:
        return path+[link]+[goal]
    crawled.append(link)
    to_crawl.extend((new_link, path + [new_link]) for new_link in links)

另请注意,您的现有代码存在严重问题:to_crawl.append(links)会将链接列表附加为单个链接,显然您希望单独附加该列表中的每个链接。我已经使用extend确定了这一点。

作为旁注,path+[link]+[goal]回归是个奇怪的事情。例如,如果您通过路径A-B-C-D从第A页转到第D页,那么您将以B,C,D,C,D作为返回值结束,这至少可以说是奇怪的。如果您需要最后一个链接和目标与路径分开,为什么不只是return path, link, goal而不是将它们打包到路径上?