python从多个随机维基百科页面检索文本

时间:2017-05-15 07:08:12

标签: python python-2.7 wikipedia wikimedia

我正在使用带有维基百科包的python 2.7来检索来自多个随机维基百科页面的文本,如docs中所述。

我使用以下代码

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引发DisambiguationError(getattr(self,' title',   第['标题']),may_refer_to)   wikipedia.exceptions.DisambiguationError:" Priuralsky"可以参考:   Priuralsky区Priuralsky(乡村)

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

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

由于

2 个答案:

答案 0 :(得分:3)

当你为随机文章和维基百科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

答案 1 :(得分:1)

根据文档(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)