从维基百科页面获取所有链接

Get all links from page on Wikipedia

我正在制作一个 Python 网络爬虫程序来播放 The Wiki game

如果您不熟悉这款游戏:

  1. 从维基百科上的某篇文章开始
  2. 选择一篇目标文章
  3. 尝试通过单击 wiki/ links
  4. 从起始文章转到目标文章

我这样做的过程是:

  1. 以一篇起始文章和一篇目标文章作为输入
  2. 获取link到目标文章
  3. 的文章列表
  4. 在发现的 link 上执行 breadth-first search,避免从第一篇文章
  5. 开始已经访问过的页面
  6. 检查目标文章是否在当前页面上:如果是,则 return path_crawler_took+goal_article
  7. 检查目标 link 的任何文章是否在当前页面上。如果其中之一是 return path_crawler_took+intermediate_article+goal

我遇到了一个问题,程序会 return 一条路径,但这条路径不会真正 link 到达目标。

def get_all_links(source):
    source = source[:source.find('Edit section: References')]
    source = source[:source.find('id="See_also"')]
    links=findall('\/wiki\/[^\(?:/|"|\#)]+',source)
    return list(set(['http://en.wikipedia.org'+link for link in links if is_good(link) and link]))

links_to_goal = get_all_links(goal)

我意识到我通过从目标页面中删除所有 link 来实现目标 link,但是 wiki/link 是单向的:一个页面的目标 link 并不意味着该页面 link 达到了目标。

如何获得link达到目标的文章列表?

维基百科有一个内置工具可以完成您所描述的事情WhatLinksHere/Backlink

您可以在每个维基百科页面上看到这个工具。

您可以简单地从目标页面的反向链接页面中删除所有链接。

'http://en.wikipedia.org/w/index.php?title=Special%3AWhatLinksHere&limit='500'&target='+goal+'&namespace=0'
                                                                                          ^^^^
                                                                                          Article you are trying to reach here

Wiki-help page for WhatLinksHere