Skip to content

[crawler] Blackboard 端点与公开内容抓取汇总 #48

Description

@tiankaima-copilot

目的

记录 Blackboard 公开匿名访客会话的使用方式,并汇总当前公开站点抓取结果。重点是获取可检索的新闻、通知、课程作业、实验和参考材料;登录壳页、重复页面和无内容导航页不进入正文索引。

Blackboard 端点与作业获取

课程 ID、content ID 和资源 ID 会变化,下面以课程 _297_1 为例。

1. 建立匿名访客会话

GET https://www.bb.ustc.edu.cn/webapps/login?action=guest_login&new_loc=%2Fwebapps%2Fblackboard%2Fexecute%2Flauncher%3Ftype%3DCourse%26id%3D_297_1

使用同一个 HTTP 客户端跟随跳转并保存 cookie;不提交用户名或密码。

2. 打开课程资源目录

GET https://www.bb.ustc.edu.cn/webapps/blackboard/content/listContent.jsp?content_id=_12953_1&course_id=_297_1&mode=reset

目录 HTML 中的 /bbcswebdav/pid-.../xid-... 是资源入口。继续使用同一访客会话请求它,通常会跳转到实际文件:

/bbcswebdav/pid-12961-dt-content-rid-50846_1/xid-50846_1
  -> /courses/ESB5316/Week2-Labwork-1.ppt

抓取器会保存请求 URL、最终 URL、状态、MIME、文件名、大小、SHA-256、本地路径和来源页面,并标记 access_mode=guest_session。直接返回 401/403 或登录表单的资源标记为 auth_required,不绕过权限。

已验证的资源包括:

  • 课程 297「GPU并行计算和CUDA程序开发及优化」的实验 PPT、CUDA 参考材料和课程 PPT;
  • 课程 584「国际金融(英)」的 Homework、Exercise、Answer Key 等 DOCX/PPTX。

当前抓取快照

统计日期:2026-08-22。

  • 130 个官方来源,248,284 个已抓取页面;
  • 17,838 个页面识别为新闻详情页,其中 17,836 个达到内容索引阈值;
  • 按页面发布时间统计,近一年新闻详情页 3,180 个;
  • 结构化文章 111,738 条,其中 104,524 条有发布时间;
  • 已保存 73,413 条图片记录和 174 个公开文档附件;
  • 页面评分分布:full_index 48,429、metadata_and_assets 28,061、audit_only 10,754、not_indexed 161,040。

抓取仍可断点续跑,当前 frontier 还有 60,603 个待处理 URL;其中图书馆、Blackboard 和部分院系站点占比较高。因此这些数字是当前快照,不代表全站已经完成。

本地结构化数据

  • data/crawler.sqlite:sources、frontier、pages、links、articles、media、assets、失败记录和评分字段;
  • data/pages/:原始 HTML;
  • data/articles/:文章 JSON 与正文 HTML;
  • data/media/:按 SHA-256 去重的图片;
  • data/assets/:PDF、Office 等课程附件;
  • data/exports/articles.jsonl:文章导出;
  • data/exports/source-report.json:每个来源的新闻数量、近一年活跃度和待抓数量。

文章记录包含标题、作者、发布时间、更新时间、栏目、摘要、正文 HTML/纯文本/Markdown、JSON-LD、来源 URL 和图片关联;页面记录包含 page_kindaccess_modevalue_scorevalue_tier、评分原因和重复关系。

本地查看

crawler/ 目录启动只读展示服务:

uv run ustc-crawler serve --db data/crawler.sqlite --data-dir data

默认地址为 http://127.0.0.1:8765/,提供概览、新闻检索、文章详情、来源统计和 Blackboard 附件列表;同时提供对应的 JSON API。

边界

只抓取官方来源的公开 HTTP(S) 内容;Blackboard 只使用公开匿名 guest_login 会话。不提交凭据,不绕过登录、验证码、403 或其他权限控制;开源软件镜像不纳入本项目。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions