api - 使用维基百科 API 获取维基百科文章的第一个链接

标签 api wikipedia wikipedia-api

我遇到了以下问题:Get the first link in a Wikipedia article not inside parentheses我正在努力得到同样的结果。

但是,我引用的问题中的特权方法是解析整个维基百科页面以获得所需的链接。

我更愿意使用wikipedia API但我遇到了一个主要问题:我不知道如何(或者是否可能)按页面中的外观对链接进行排序。

我现在的请求如下:

http://en.wikipedia.org/w/api.php?action=query&titles=United_States&prop=links&pllimit=max

最佳答案

嗯,看来使用 API 无法做到这一点。所以我用 Python 和 BeautifulSoup 编写了一个解析器。这是实现:

import urllib2
from bs4 import BeautifulSoup

template = "https://wikipedia.org"    

def isValid(ref,paragraph):
   if not ref or "#" in ref or "//" in ref or ":" in ref:
      return False
   if "/wiki/" not in ref:
      return False
   if ref not in paragraph:
      return False
   prefix = paragraph.split(ref,1)[0]
   if prefix.count("(")!=prefix.count(")"):
      return False
   return True

def validateTag(tag):
   name = tag.name
   isParagraph = name == "p"
   isList = name == "ul"
   return isParagraph or isList

def getFirstLink(wikipage):
   req = urllib2.Request(template+wikipage, headers={'User-Agent' : "Magic Browser"})
   page = urllib2.urlopen(req)
   data = page.read()
   soup = BeautifulSoup(data)
   soup = soup.find(id="mw-content-text")
   for paragraph in soup.find_all(validateTag, recursive=False):
      for link in paragraph.find_all("a"):
         ref = link.get("href")
         if isValid(str(ref),str(paragraph)):
            return link
   return False

如果您想了解有关此项目的更多信息,请参阅包含完整源代码的 github 页面:https://github.com/ChrisJamesC/wikipediaPhilosophy

关于api - 使用维基百科 API 获取维基百科文章的第一个链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18916616/

相关文章:

java - 将 Digi 的 XBee Java 库与 API 2 中的 XBee 结合使用(转义模式)

android - 安全 API 访问 : best strategy to secure readonly rails api for android client

search - 维基百科的搜索是如何进行的?

url - 维基百科 URL 后面附加的新 #_ 是什么?为什么?

xpath - 区分维基百科消歧和普通页面

javascript - 无法让维基百科的 API 工作

python - 维基数据查询服务 - 获取页面的创建日期

android - 未获得 Kindle Fire Android 的应用内购买回调

api - Soundcloud 波形节点

database - 私有(private) MediaWiki wiki 和创建页面的机器人