我遇到了以下问题:获取不在括号内的维基百科文章中的第一个链接,我试图获得相同的结果。
但是,我引用的问题中的特权方法是解析整个维基百科页面以获得所需的链接。
我更喜欢使用wikipedia API,但我遇到了一个主要问题:我不知道如何(或者甚至可能)按页面中的外观排序链接。
我现在的请求如下:
http://en.wikipedia.org/w/api.php?action=query&titles=United_States&prop=links&pllimit=max
我遇到了以下问题:获取不在括号内的维基百科文章中的第一个链接,我试图获得相同的结果。
但是,我引用的问题中的特权方法是解析整个维基百科页面以获得所需的链接。
我更喜欢使用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