【问题标题】:Distinguishing between article pages and list/disambiguation pages in Wiki区分 Wiki 中的文章页面和列表/消歧页面
【发布时间】:2014-06-07 10:22:21
【问题描述】:

我正在使用“https://en.wikipedia.org/wiki/Special:Random”从维基百科生成随机页面,并使用 BeautifulSoup 阅读它们。问题是我只想要这样的文章页面:

http://en.wikipedia.org/wiki/Ada_County,_Idaho

但有时它是列表页面或消歧页面(我不想要)。例如:http://en.wikipedia.org/wiki/List_of_U.S._counties_named_after_personal_first_names

有没有一种简单的方法来区分这些情况?

【问题讨论】:

  • 您是否尝试过查看为这些案例生成的 HTML?是否所有列表页面的<title> 都开始“列表”?您能否搜索“此消歧页面列出了与同一标题相关的文章”。到目前为止你做了什么?
  • 我正在使用 BeautifulSoup:read_data = urllib2.urlopen(src).read() self.soup = BeautifulSoup(read_data) s="" defination = self.soup.find_all('p')不涉及 HTML
  • “不涉及 [原文如此] HTML”?你觉得BeautifulSoup 在做什么?
  • 我知道它在做什么。我只是不想参与与 HTML 的直接业务。清除吗?
  • 适度;使用 BS 获取标题元素并检查它是如何开始的算不算太动手?

标签: python wikipedia


【解决方案1】:

使用the API 判断页面是否已消除歧义。例如。 this 将在文章命名空间 (try interactively in sandbox) 中检索 10 个随机标题。消歧页面的属性中将包含"pageprops":{"disambiguation":""}。不幸的是,列表没有这么简单的方法,您必须从它们的标题 (/^List of .*/) 或类别中猜测。

【讨论】:

    【解决方案2】:

    可以(大多数时候)通过查询 WikiData 中的 P31 (instance of) 的值来区分列表页面。 List pages 的值为 Q13406463(维基媒体列表页面)。

    https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q678323
    

    如果您使用这种方法,您可以同时检查消歧页面。这些will have 的值为Q4167410 (Wikimedia disambiguation page)。

    有许多 Python 库用于与 MediaWiki API 交互,例如wikitools:

    listOfTitles = 'Ada_County,_Idaho|List_of_U.S._counties_named_after_personal_first_names'
    
    site = wikitools.Wiki("http://www.wikidata.org/w/api.php", user, password)
    site.login(user,password)
    
    params = {'action':'wbgetentities', 'props':'claims','titles':listOfTitles,'format':'json'}
    request = wikitools.APIRequest(site, params)
    result = request.query()
    

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 2020-08-04
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多