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

python retrieve text from multiple random wikipedia pages

我正在使用 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)

并得到以下错误

File "/home/user/.local/lib/python2.7/site-packages/wikipedia/wikipedia.py", line 393, in __load raise DisambiguationError(getattr(self, 'title', page['title']), may_refer_to) wikipedia.exceptions.DisambiguationError: "Priuralsky" may refer to: Priuralsky District Priuralsky (rural locality)

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

我假设问题是在搜索维基百科页面时获取一个具有多个选项的随机名称。 当我用它来获取一个维基百科页面时。效果很好。

谢谢

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

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

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)