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

标签 python python-2.7 web-crawler

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

如果你不熟悉这个游戏:

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

我这样做的过程是:

  1. 以一篇起始文章和一篇目标文章作为输入
  2. 获取链接到目标文章的文章列表
  3. 预制 breadth-first search在找到的链接上避免从开始文章开始访问过的页面
  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)

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

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

最佳答案

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

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

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

'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

关于python - 从维基百科页面获取所有链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30519023/

相关文章:

Python Matplotlib 无法将序列乘以 'float' 类型的非 int

python - 同时安装多个 Python 发行版会遇到什么问题,如何最好地避免这些问题?

python - 如何获取边界框区域内热图的平均值

youtube - 如何导出 YouTube channel 的所有视频列表(标题、URL 和发布日期)?

python - 从 POST 解码 base64 以在 PIL 中使用

django - 导入错误 : No module named local

python - 返回括号之间的文本

python - 检索 Stack Overflow 上的所有功能问题

python - 尝试使用scrapy抓取值

PHP- 无法更改 xampp 中的 max_execution_time