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

时间:2015-05-29 00:00:29

标签: python python-2.7 web-crawler

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

如果你不熟悉这个游戏:

  1. 从维基百科上的一些文章开始
  2. 选择目标文章
  3. 只需点击维基/链接
  4. ,即可从开始文章中了解目标文章

    我这样做的过程是:

    1. 将一篇文章和一篇目标文章作为输入
    2. 获取链接到目标文章的文章列表
    3. 对找到的链接执行breadth-first search,避免从开始文章开始访问过的网页
    4. 检查目标文章是否在当前页面上:如果是,则返回path_crawler_took+goal_article
    5. 检查链接到目标的任何文章是否在当前页面上。如果其中之一是,请返回path_crawler_took+intermediate_article+goal
    6. 我遇到一个问题,程序会返回一个路径,但路径并不真正链接到目标。

      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 /链接是单向的:仅仅因为目标链接到页面并不意味着页面链接到目标。

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

1 个答案:

答案 0 :(得分:7)

维基百科有一个内置工具,可以完成您所描述的内容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