【问题标题】:Get all links from page on Wikipedia从维基百科页面获取所有链接
【发布时间】:2015-05-29 00:00:28
【问题描述】:

我正在制作一个 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/ 链接是单向的:仅仅因为目标链接到一个页面并不意味着该页面链接到目标。

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

【问题讨论】:

标签: python python-2.7 web-crawler


【解决方案1】:

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

您可以在每个 Wikipedia 页面上看到此工具。

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

'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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    相关资源
    最近更新 更多