我正在制作一个 Python 网络爬虫程序来播放 The Wiki game .
如果你不熟悉这个游戏:
- 从维基百科上的某篇文章开始
- 选择一篇目标文章
- 尝试通过单击 wiki/链接从起始文章转到目标文章
我这样做的过程是:
- 以一篇起始文章和一篇目标文章作为输入
- 获取链接到目标文章的文章列表
- 预制 breadth-first search在找到的链接上避免从开始文章开始访问过的页面
- 检查目标文章是否在当前页面:如果是,则返回
path_crawler_took+goal_article
- 检查当前页面上是否有任何链接到目标的文章。如果是其中之一,则返回
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)
我意识到我是通过从目标页面上抓取所有链接来获得目标链接的,但是 wiki/链接是单向的:仅仅因为目标链接到一个页面并不意味着该页面链接到目标。
如何获得链接到目标的文章列表?
最佳答案
维基百科有一个内置工具,可以完成您所描述的事情 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
关于python - 从维基百科页面获取所有链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30519023/