2

次の質問に出くわしました:ウィキペディアの記事で括弧内にない最初のリンクを取得し、同じ結果を得ようとしています。

ただし、私が引用した質問で特権を与えられている方法は、目的のリンクを取得するためにウィキペディアのページ全体を解析することです。

私はウィキペディア APIを使用したいと思っていますが、大きな問題に遭遇しました。ページ内の外観によってリンクを並べ替える方法 (または可能かどうか) がわかりません。

私が今持っているリクエストは次のとおりです。

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

4

1 に答える 1

2

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

于 2013-09-24T21:57:46.707 に答える