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

Ian*_*ian 2 python web-crawler python-2.7

我正在制作一个Python网络爬虫程序来玩维基游戏.

如果你不熟悉这个游戏:

  1. 从维基百科上的一些文章开始
  2. 选择目标文章
  3. 尝试通过单击wiki/links从开始文章中获取目标文章

我这样做的过程是:

  1. 以一篇文章和一篇目标文章作为输入
  2. 获取链接到目标文章的文章列表
  3. 预制棒广度优先搜索上的链接找到避免已经访问过的网页从一开始起文章
  4. 检查目标文章是否在当前页面上:如果是,则返回 path_crawler_took+goal_article
  5. 检查链接到目标的任何文章是否在当前页面上.如果其中之一是,请返回path_crawler_took+intermediate_article+goal

我有一个问题,程序将返回一个路径,但路径不会真正链接到目标.

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)
Run Code Online (Sandbox Code Playgroud)

我意识到我通过抓取目标页面上的所有链接来获取目标的链接,但是wiki/links是单向的:仅仅因为目标链接到页面并不意味着页面链接到目标.

如何获得链接到目标的文章列表?

Dav*_*nus 7

维基百科有一个内置工具,可以完成您所描述的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
Run Code Online (Sandbox Code Playgroud)

WhatLinksHere的Wiki帮助页面