skip to content
WangWindow

Search

    从网页自动提取「形势与政策」题库 摘要:本文分享一个高效提取“形势与政策”在线自测题库的方法——通过保存网页为HTML文件,再用Python脚本自动解析题目、选项与正确答案,最终生成整洁的文本题库。适用于学生复习、资料整理或二次开发。 背景 “形势与政策”是高校思想政治教育的重要组成部分,许多学校通

    从网页自动提取题库

    / 9 min read

    从网页自动提取「形势与政策」题库

    摘要:本文分享一个高效提取“形势与政策”在线自测题库的方法——通过保存网页为HTML文件,再用Python脚本自动解析题目、选项与正确答案,最终生成整洁的文本题库。适用于学生复习、资料整理或二次开发。

    背景

    “形势与政策”是高校思想政治教育的重要组成部分,许多学校通过在线学习平台(如超星、智慧树等)布置自测任务。这些平台通常会在提交后显示所有题目的正确答案,但不提供导出功能。手动搜题费时费力,还容易出错。

    有没有办法自动化这一过程?答案是肯定的!

    本文将手把手教你:

    1. 如何保存包含题目的网页;
    2. 如何用一段Python脚本自动提取题目和答案;
    3. 脚本原理与关键代码解析。

    🔧 环境要求:Python 3.x,无需额外安装库。


    第一步:保存网页为HTML文件

    1. 进入课程的“自测”界面;
    2. 创建一套自测题并直接提交(无需答题);
    3. 提交后页面会显示所有题目及正确答案;
    4. 在浏览器中按下 Ctrl + S(Windows)或 Cmd + S(Mac),将页面保存为完整网页(即 xxxx.html 的 html 文件);
    5. 确保保存的是包含题目的完整HTML,而非仅链接。

    💡提示:部分平台可能有反爬机制,若无法正常保存,可尝试使用浏览器开发者工具(F12)复制 <body> 内容,手动构建HTML文件。


    第二步:运行Python脚本提取题库

    将以下代码保存为 extract.py,与 查看详情.html 放在同一目录下,运行即可生成 形势与政策7.txt 文件。

    import re
    import html
    import os
    def clean_text(text):
    if not text:
    return ""
    text = re.sub(r"<[^>]+>", "", text) # 去除HTML标签
    text = html.unescape(text) # 解码HTML实体(如 &nbsp;)
    text = re.sub(r"\s+", " ", text).strip() # 合并多余空白
    return text
    def main():
    input_file = "查看详情.html"
    output_file = "形势与政策7.txt"
    if not os.path.exists(input_file):
    print(f"错误:未找到文件 {input_file}")
    return
    with open(input_file, "r", encoding="utf-8") as f:
    content = f.read()
    # 定位主容器(含所有题目的区域)
    start_match = re.search(r'<div[^>]*id="fanyaMarking"[^>]*>', content)
    if start_match:
    content = content[start_match.start():]
    else:
    print("警告:未找到主容器 'fanyaMarking',将处理整个文件。")
    # 按题型标题分割(如“单选题”、“多选题”)
    parts = re.split(r'(<h2[^>]*class="type_tit"[^>]*>.*?</h2>)', content, flags=re.S)
    results = []
    for part in parts:
    if not part.strip():
    continue
    # 如果是题型标题
    if 'type_tit' in part:
    header = clean_text(part)
    results.append(f"\n{header}\n")
    else:
    # 分割每一道题
    questions = re.split(r'<div class="marBom60 questionLi', part)
    for q_block in questions:
    if "<h3" not in q_block: # 跳过无效块
    continue
    # 提取题目
    q_match = re.search(r"<h3[^>]*>(.*?)</h3>", q_block, re.S)
    if not q_match:
    continue
    q_text = clean_text(q_match.group(1))
    # 提取选项
    options = ""
    ul_match = re.search(r'<ul[^>]*class="mark_letter colorDeep qtDetail"[^>]*>(.*?)</ul>', q_block, re.S)
    if ul_match:
    lis = re.findall(r"<li[^>]*>(.*?)</li>", ul_match.group(1), re.S)
    for li in lis:
    options += clean_text(li) + "\n"
    # 提取正确答案
    ans_match = re.search(r'<span[^>]*class="rightAnswerContent"[^>]*>(.*?)</span>', q_block, re.S)
    answer = clean_text(ans_match.group(1)) if ans_match else ""
    # 格式化输出
    results.append(f"{q_text}\n{options}答案:{answer}\n")
    with open(output_file, "w", encoding="utf-8") as f:
    f.write("\n".join(results))
    print(f"✅ 提取完成!题库已保存至:{output_file}")
    if __name__ == "__main__":
    main()

    运行效果示例

    生成的 形势与政策7.txt 内容如下:

    一. 单选题(共 223 题)
    1. (单选题)“十四五”时期,我们坚持以人民为中心的发展思想,在高质 量发展中持续加大民生投入,着力解决人民群众急难愁盼问题,不断书写温暖人心的民生答卷。下列关于我国民生福祉的说法错误的是( )。
    A. 实施重大专项支持一批托育综合服务中心、公办托育机构和普 惠性托位建设
    B. 全国城镇新增就业人口连续 4 年保持在 1200 万人以上
    C. 全国劳动年龄人口平均受教育年限从 2020 年的 10.8 年提升至 2024 年的 11.3 年,已超过高收入国家水平
    D. 国产创新药数量和质量齐升,国产创新药获批上市数量是 “十三五”时期的 2.8 倍
    答案:C
    2. (单选题)2024年10月16日,习近平总书记给中国国际大学生创新大赛(2024)总决赛参赛学生代表回信,充分肯定大赛在促进学生创新实践、增进中外青年友谊方面的重要作用,勉励广大青年学生要弘扬科学精神,积极投身科技创新,为促进中外科技交流、推动科技进步贡献青春力量。中国国际大学生创新大赛质量再创新高,凸显人才培养模式向()转变。
    A. “政治素养培养为先”
    B. “道德素养培养为先”
    C. “能力素质培养为先”
    D. “知识素养培养为先”
    答案:C
    。。。。
    二. 多选题(共 182 题)
    1. (多选题)市场是最稀缺的资源,无论国际风云如何变幻,()、()、()、()的国内市场始终是我们应对各种风险挑战的有力保障。
    A. 规模庞大
    B. 层次多样
    C. 外向依存
    D. 潜力巨大
    E. 统一开放
    答案:ABDE
    2. (多选题)2025年4月29日,习近平总书记在上海考察时强调,“发展人工只能前景广阔,要加强()和()。
    A. 政策支持
    B. 技术支持
    C. 资金支持
    D. 人才培养
    E. 队伍建设
    答案:AD
    。。。。
    三. 判断题(共 95 题)
    1. (判断题)今年3月22日是第三十三届“世界水日”。
    A. 对
    B. 错
    答案:对
    2. (判断题)七七事变是全民族抗战的开始。
    A. 对
    B. 错
    答案:对
    。。。。

    技术解析:脚本是如何工作的?

    1. HTML清洗clean_text() 函数去除标签、解码特殊字符、清理空格,确保文本干净;
    2. 定位内容区域:通过 id="fanyaMarking" 找到题目所在的主容器,避免处理无关内容;
    3. 按题型分组:利用 <h2 class="type_tit"> 分割“单选题”“多选题”等板块;
    4. 逐题解析
      • 题目在 <h3> 标签内;
      • 选项在 <ul class="mark_letter ..."><li> 中;
      • 正确答案在 <span class="rightAnswerContent"> 中;
    5. 结构化输出:按人类可读格式组织题目、选项与答案。

    注意事项与扩展建议

    • 平台差异:不同学校的平台HTML结构可能略有不同,若脚本失效,可检查类名(如 questionLirightAnswerContent)是否变化,并相应调整正则表达式。
    • 尊重版权:提取内容仅限个人学习使用,请勿用于商业传播。

    结语

    通过简单的网页保存 + Python正则解析,我们就能将封闭的在线题库转化为开放、可编辑的文本资源。这不仅提升了学习效率,也体现了“用技术解决实际问题”的乐趣。

    如果你觉得这个脚本有用,欢迎收藏、转发,或在评论区分享你的改进版本!