1

我正在使用带有 wikipedia 包的 python 2.7 从多个随机 wikipedia 页面中检索文本,如文档中所述。

我使用以下代码

def get_random_pages_summary(pages = 0):
    import wikipedia
    page_names = [wikipedia.random(1) for i in range(pages)]
    return [[p,wikipedia.page(p).summary] for p in page_names]

text =  get_random_pages_summary(50)

并得到以下错误

文件“/home/user/.local/lib/python2.7/site-packages/wikipedia/wikipedia.py”,第 393 行,在 __load raise DisambiguationError(getattr(self, 'title', page['title']) , may_refer_to) wikipedia.exceptions.DisambiguationError:“Priuralsky”可能指:Priuralsky District Priuralsky(农村地区)

我想做的是获取文本。来自维基百科的随机页面,我需要它只是普通文本,没有任何降价

我认为问题是在搜索维基百科页面时获得一个具有多个选项的随机名称。当我用它来获取一个维基百科页面时。它运作良好。

谢谢

4

2 回答 2

4

当您为随机文章和维基百科 API(不直接使用不同工具提取 HTML)执行此操作时,我的建议是捕获 DisambiguationError 并重新随机文章以防发生这种情况。

def random_page():
   random = wikipedia.random(1)
   try:
       result = wikipedia.page(random).summary
   except wikipedia.exceptions.DisambiguationError as e:
       result = random_page()
   return result
于 2017-05-15T07:47:32.533 回答
2

根据文档(http://wikipedia.readthedocs.io/en/latest/quickstart.html),该错误将返回多个候选页面,因此您需要再次搜索该候选页面。

try:
    wikipedia.summary("Priuralsky")
except wikipedia.exceptions.DisambiguationError as e:
    for page_name in e.options:
        print(page_name)
        print(wikipedia.page(page_name).summary)

你可以像这样改进你的代码。

import wikipedia

def get_page_sumarries(page_name):
    try:
        return [[page_name, wikipedia.page(page_name).summary]]
    except wikipedia.exceptions.DisambiguationError as e:
        return [[p, wikipedia.page(p).summary] for p in e.options]

def get_random_pages_summary(pages=0):
    ret = []
    page_names = [wikipedia.random(1) for i in range(pages)]
    for p in page_names:
        for page_summary in get_page_sumarries(p):
            ret.append(page_summary)
    return  ret

text = get_random_pages_summary(50)
于 2017-05-15T07:48:15.543 回答