Python调用维基百科WIKI(附完整代码)

目录

效果展示

代码详解

        1.模块导入

        2.核心函数 wiki_search

        3.异常处理机制。

        4.程序入口

完整代码


效果展示


代码详解

        这段 wiki_demo.py 程序展示了如何使用 Python 的第三方库 wikipedia 来实现一个简单的维基百科查询工具。我们将从模块导入、核心函数、异常处理和程序入口四个部分进行讲解。

        1.模块导入

        代码使用 import wikipedia 引入了 wikipedia 库。这个库封装了维基百科的 MediaWiki API,使开发者能够通过简单的 Python 方法直接搜索和获取维基百科页面,而不必自己手动构建 HTTP 请求和解析 JSON 数据。

        该函数接受三个参数:query 表示要搜索的关键词,lang 表示维基百科语言版本(例如中文为 "zh",英文为 "en"),sentences 表示返回的摘要句子数量。函数开头调用         wikipedia.set_lang(lang) 来设置查询语言,然后尝试调用 wikipedia.summary(query, sentences=sentences) 获取页面摘要,同时用 wikipedia.page(query) 获取页面的完整信息,包括标题与 URL。最后将这些信息打包成字典返回。

        3.异常处理机制。

        如果遇到 wikipedia.exceptions.DisambiguationError,表示该关键词对应多个可能的页面,例如“苹果”可能是水果或公司。这种情况下返回一个包含提示信息和候选条目列表的字典。
如果遇到 wikipedia.exceptions.PageError,说明没有找到对应页面,此时返回一个提示未找到的错误信息。
        其他任何异常都会被捕获,并返回一个通用的“查询失败”提示以及异常信息,防止程序直接崩溃。

        4.程序入口

        当文件作为主程序运行时,会提示用户输入关键词和语言代码。如果用户没有输入语言代码,则默认使用中文。然后调用 wiki_search 执行查询,并根据返回结果进行不同处理:如果包含 error 键,则输出错误提示,并在有候选项时列出前十个可能的页面;否则输出标题、页面 URL 以及摘要。


完整代码

# wiki_demo.py


import wikipedia


def wiki_search(query, lang="zh", sentences=3):
    """
    查询维基百科摘要
    :param query: 搜索关键词
    :param lang: 语言代码,例如 zh(中文)、en(英文)
    :param sentences: 返回的句子数
    :return: 结果字符串
    """
    wikipedia.set_lang(lang)  # 设置语言
    try:
        summary = wikipedia.summary(query, sentences=sentences)  # 获取摘要
        page = wikipedia.page(query)  # 获取完整页面对象
        return {
            "title": page.title,
            "summary": summary,
            "url": page.url
        }
    except wikipedia.exceptions.DisambiguationError as e:
        # 歧义页,返回候选列表
        return {
            "error": f"关键词 '{query}' 有多个含义,请选择:",
            "options": e.options[:10]  # 只取前10个候选
        }
    except wikipedia.exceptions.PageError:
        return {"error": f"未找到 '{query}' 的相关页面。"}
    except Exception as e:
        return {"error": f"查询失败: {str(e)}"}


if __name__ == "__main__":
    # 命令行输入关键词
    keyword = input("请输入要搜索的关键词:")
    lang = input("请输入语言代码(默认 zh):") or "zh"

    result = wiki_search(keyword, lang=lang)

    if "error" in result:
        print(result["error"])
        if "options" in result:
            print("候选条目:")
            for opt in result["options"]:
                print(" -", opt)
    else:
        print(f"标题: {result['title']}")
        print(f"URL: {result['url']}")
        print("摘要:", result["summary"])


重点说明

wiki_search 接受三个参数:

  • query:要搜索的关键词,例如“人工智能”;

  • lang:语言代码,例如 "zh" 表示中文,"en" 表示英文,可以细化为 "zh-hans"(简体)或 "zh-hant"(繁体);

  • sentences:摘要中返回的句子数量,默认 3 句。

        在函数中,wikipedia.set_lang(lang) 会设置查询语言版本,例如选择简体或英文维基百科。
        接下来使用 wikipedia.summary(query, sentences=sentences) 获取页面摘要,返回的是纯文本;再调用 wikipedia.page(query) 获取完整的页面对象,从中可以得到标题 (page.title) 和页面 URL (page.url)。这些信息被组合成一个字典返回。


        为了防止网络错误或搜索异常导致程序崩溃,代码使用 try/except 进行分类处理:

        DisambiguationError:表示该关键词有多个含义,例如“苹果”既可能是水果也可能是公司(这是我最能想到的了,但是这里居然不生效,也算是个BUG吧)。这时函数会返回错误提示,并给出前 10 个可能的候选条目。

        PageError:表示找不到与关键词完全匹配的页面,返回提示信息。

        其他异常:捕获所有未分类的错误,比如网络连接失败、超时等,并返回“查询失败”的提示和错误原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WenJGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值