数据采集与处理--相关习题

姜智浩 Lv5

题目

什么是主题爬虫 其主要是用在哪些场合

解析

主题爬虫(Focused Crawler / Topic-specific Crawler)是一种有目标导向的网络爬虫,与通用爬虫(如 Googlebot)不同,它不追求覆盖整个互联网,而是只抓取与特定主题高度相关的网页。

其核心思想是:
在爬取过程中,动态评估网页内容与预设主题的相关性,据此决定是否下载该页面、是否将其链接加入待爬队列,从而提高爬取效率与数据质量,减少无关页面的抓取与存储开销。


解答

定义
主题爬虫(Focused Crawler)是一种根据用户指定主题(如“人工智能”“新冠疫情”“新能源汽车政策”),在爬取过程中结合链接分析内容相关性预测,优先抓取并保留与主题高度相关的网页,过滤无关内容的智能网络爬虫系统。

关键技术环节

  1. 主题建模:用关键词集合、主题词典、分类器(如SVM、BERT)或主题向量(如LDA、Sentence-BERT)表示目标主题。
  2. 相关性评估
    • 对已下载页面:提取文本 → 特征表示(TF-IDF、词嵌入等)→ 计算与主题的相似度。
    • 对待爬链接(URL/锚文本/上下文):通过链接上下文(如锚文本、父页面主题)预测目标页相关性(“预测式爬取”)。
  3. 优先级调度:根据相关性得分动态调整URL队列的抓取顺序(如Best-First策略)。

主要应用场景

应用场景 说明
垂直搜索引擎构建 如“医学文献搜索引擎”“法律案例检索系统”,需精准采集特定领域网页。
舆情监测与热点追踪 围绕“某企业”“某政策”“某突发事件”持续抓取相关新闻、社交媒体、论坛讨论。
学术资源采集 聚焦某研究方向(如“联邦学习”“图神经网络”),从arXiv、会议网站、机构库中采集论文。
电商竞品监控 抓取特定品类(如“无线蓝牙耳机”)的商品详情、价格、评论,用于比价或市场分析。
政府/企业知识库建设 持续采集政策文件、行业报告、标准规范等结构化/半结构化数据。
训练大模型的领域数据收集 为微调领域大模型(如医疗、金融LLM),需高质量、高相关性的语料,主题爬虫可高效构建数据集。

实际系统中常结合:

  • 增量爬取(定期更新)
  • 去重与质量过滤(正文提取、广告过滤)
  • 反爬应对(User-Agent轮换、请求限速、验证码识别)

核心考点总结

考点类别 具体内容
📌 概念辨析 主题爬虫 vs 通用爬虫 vs 增量爬虫
📌 核心技术 主题表示方法、相关性预测模型(基于内容/链接/URL)、优先级调度策略
评估指标 查全率(Recall)、查准率(Precision)、 harvest rate(收获率 = 相关页面数 / 总抓取数)
挑战 主题漂移、语义鸿沟(URL/锚文本与内容不一致)、动态网页渲染(需结合Selenium/Playwright)
扩展知识 主动学习结合(人机协同标注提升模型);与图神经网络结合(利用网页链接图结构提升预测)

题目

什么是Deep Web?它与普通的Web页面有什么差异?

解析

“Deep Web”(深网)是一个常被误解的概念——它不等于暗网(Dark Web),也不代表“非法内容”。理解其本质,关键在于区分内容可访问性搜索引擎可索引性


解答

一、什么是 Deep Web(深网)?

Deep Web 是指无法被传统搜索引擎(如 Google、Bing)通过常规爬虫自动发现和索引的互联网内容集合
这类内容真实存在、合法可访问,但因其访问机制限制,未被纳入搜索引擎数据库。

核心特征:不可被通用爬虫自动发现(not inaccessible,而是 unindexed)。

二、Deep Web 与 Surface Web(表层网络)的差异

维度 Surface Web(表层网络) Deep Web(深网)
可索引性 可被搜索引擎爬虫抓取并建立索引(如新闻、博客、公开企业官网) 不可被通用爬虫自动索引
访问方式 直接通过 URL 或搜索结果访问 通常需:登录认证表单提交数据库查询API 调用 等交互操作
内容形式 静态 HTML 页面为主 动态生成内容(如数据库查询结果)、私有资源、需权限内容
规模占比 仅占互联网内容 约 4%~10% 占互联网内容 90% 以上(主流估计)
典型例子 Wikipedia、知乎公开文章、GitHub 公开仓库 见下表

三、Deep Web 的典型例子(合法常见场景)

类型 实例
需登录的私有内容 个人邮箱(Gmail)、网银后台、学校教务系统、企业内网、付费数据库(CNKI、IEEE Xplore)
表单驱动的内容 12306 车票查询结果、天气预报按城市查询的页面、招聘网站的“搜索职位”结果页
数据库查询结果 医院挂号系统返回的可预约号源、图书馆馆藏检索结果
API 返回的数据 微信小程序后台数据、App 从服务器拉取的 JSON 内容(未做 SSR 的前端页面)
非 HTML 资源 PDF 报告、PPT、Excel 表格(若未被搜索引擎收录)
动态渲染内容(部分) 依赖 JavaScript 渲染且未做服务端渲染(SSR)或预渲染(Prerender)的 SPA 页面(如早期 React 应用)——现代搜索引擎已部分支持,但仍有盲区

注意

  • Dark Web(暗网)是 Deep Web 的极小一部分,特指通过特殊工具(如 Tor、I2P)访问的匿名隐藏服务.onion 域名),其中可能包含非法内容,但也有合法用途(如记者匿名信道)。
  • 绝大多数 Deep Web 是日常使用的合法系统,绝非“危险地带”。

核心考点总结

考点 说明
定义核心 Deep Web = 未被搜索引擎索引的内容(≠ 不可访问,≠ 非法)
对比理解 Surface Web(可索引) vs Deep Web(不可索引) vs Dark Web(匿名隐藏服务)
规模认知 Deep Web 占互联网主体(>90%),表层网络只是“冰山一角”
技术成因 动态内容生成、访问控制(登录/权限)、缺乏入站链接、robots.txt 限制、JavaScript 依赖等
数据采集挑战 普通爬虫无法直接抓取 Deep Web;需模拟登录、提交表单、调用 API、处理验证码(如你关注的 tesserocr 即用于此类场景)——这正是数据采集与处理课程的重点难点

题目

Web服务器有哪些检测爬虫请求的方法?

这是一个数据采集与处理中的核心对抗与反爬考点。Web 服务器检测爬虫的手段日趋智能化,理解这些机制是设计高鲁棒性爬虫(或评估采集可行性)的前提。


解析

Web 服务器通过请求特征分析 + 行为模式识别 + 资源访问异常检测等多维度手段识别非人类流量。检测目的包括:

  • 保护数据资产(如防内容盗用)
  • 防止服务过载(如防 DDoS)
  • 维护业务公平性(如防抢票/秒杀脚本)

解答:Web 服务器检测爬虫的主要方法

一、请求头(Request Headers)层面检测

方法 原理 典型特征
User-Agent 异常 检查 UA 是否为空、伪造常见浏览器、或为已知爬虫标识(如 python-requests/2.28.1 缺失 UA;含 bot/spider/crawler;Python 默认 UA
缺失关键 Header 正常浏览器会自动携带 Accept, Accept-Language, Accept-Encoding, Referer, Sec-Fetch-* 爬虫常只带 User-Agent,缺少 Sec-Fetch-Mode: navigate 等安全头
Header 顺序/格式异常 浏览器发送 Header 有固定顺序和格式;爬虫拼接易出错 Connection: keep-alive 位置异常;无 Upgrade-Insecure-Requests

二、访问行为模式检测

方法 原理 爬虫典型破绽
访问频率过高/匀速 人类操作有随机延迟、停顿、回退;爬虫常匀速高频请求 每秒固定 N 次请求;无鼠标轨迹/滚动行为
无页面资源加载 浏览器会加载 CSS/JS/图片;爬虫常只请求 HTML 仅请求 /article/123,但不请求 /static/main.css/img/banner.jpg
无 Cookie 交互 服务器设 Set-Cookie 后,浏览器应携带回传;爬虫若忽略则暴露 首次访问给 sessionid=abc,后续请求无该 Cookie
缺失 JS 渲染行为 现代网站常要求执行 JS 生成 Token 或验证环境 爬虫直接 POST 表单,但未携带由 JS 生成的 csrf_token__RequestVerificationToken

三、JavaScript 挑战与环境检测(前端反爬)

方法 举例 说明
浏览器环境指纹检测 通过 JS 检测 navigator.webdriverwindow.chrome、插件列表、屏幕分辨率等 Selenium 默认会暴露 navigator.webdriver = true
Canvas/WebGL 指纹 利用硬件渲染差异生成唯一指纹 真实设备指纹稳定,爬虫环境(如无头浏览器)易一致或异常
行为验证(CAPTCHA) reCAPTCHA v2/v3、极验、阿里云验证码 v3 通过用户行为打分(score < 0.5 视为机器人);v2 要求点选/滑动
动态 Token 注入 关键请求参数(如 sign, token)由 JS 计算生成 sign = md5(url + timestamp + salt),爬虫无法预测

四、IP 与网络层检测

方法 原理
IP 访问频次/并发量 单 IP 短时大量请求 → 触发限流或封禁
IP 地理位置异常 如用户账号常驻北京,突然从数据中心 IP(如 AWS us-east-1)访问
IP 黑名单匹配 使用公开爬虫 IP 库(如已知 Tor 出口节点、云服务器段)
HTTP/2 + TLS 指纹 真实浏览器 TLS 握手有固定 Cipher Suites 顺序;爬虫库(如 requests)指纹单一

五、服务端逻辑检测

方法 示例
蜜罐陷阱(Honeypot) 页面隐藏 <a href="/trap/secret-path" style="display:none">,真实用户看不到,爬虫会跟爬
时间戳/逻辑校验 表单含隐藏字段 <input name="stime" value="1717020000">,提交时校验停留时间是否合理(如 <1s 视为机器)
请求路径异常 用户正常路径:首页 → 分类 → 列表 → 详情;爬虫直接跳 /product/999999

应对策略概览(延伸知识,常考简答/设计题)

检测手段 可行应对措施
UA/Header 异常 fake-useragent + 完整 Header 模板;使用 curl-impersonate 模拟真实浏览器指纹
行为模式 随机延时(time.sleep(random.uniform(1,3)));模拟滚动/鼠标移动(Playwright/Selenium)
JS 挑战 用无头浏览器(Playwright > Puppeteer > Selenium);逆向 JS 算法(AST 解析 + Python 重写)
验证码 OCR(如 tesserocr 处理简单验证码)、打码平台、绕过(如用第三方 API)
IP 封禁 代理 IP 池轮换(住宅代理 > 数据中心代理);降低并发

重要提醒
所有反爬绕过需遵守《网络安全法》及网站 robots.txt 和服务条款。技术用于学习与合法数据采集,严禁用于攻击或侵犯隐私


核心考点总结

考点类型 内容
概念辨析 区分“检测” vs “防御”;“特征检测” vs “行为检测”
分类记忆 按请求层、行为层、JS 层、网络层、服务层分类掌握检测方法
典型指标 UA、Referer、Cookie、请求频率、资源加载完整性、TLS/JA3 指纹
前沿趋势 从规则匹配 → 机器学习模型(如 LSTM 行为序列建模)检测异常流量
工程实践 requests + BeautifulSoup 基础上,进阶需掌握 Selenium/Playwright + 代理 + 逆向能力

题目

简述文本分类的一般流程

解析

文本分类是自然语言处理(NLP)的基础任务,也是数据采集后处理(如爬虫结果打标、舆情分析)的关键环节。其流程体现了“数据 → 特征 → 模型 → 应用”的典型机器学习 pipeline,需兼顾文本特性(高维、稀疏、语义复杂)与工程落地

解答:文本分类的一般流程

数据获取与预处理

目的:清洗噪声、统一格式、为后续处理做准备
关键操作

  • 文本清洗:去 HTML 标签、特殊符号、广告语、无关字符
  • 分词(中文必需):使用 jiebapkusegLTP 等(英文按空格/标点切分)
  • 去停用词:过滤“的”“是”“and”“the”等高频无意义词(可用哈工大/百度停用词表)
  • 词干化/词形还原(英文):runningrunnltk.stem.PorterStemmer
  • 大小写统一Appleapple(中文一般无需)

特征表示

目的:将文本转化为模型可计算的数值向量
主流方法演进

类型 方法 特点 适用场景
传统统计特征 - 词袋模型(BoW)
- TF-IDF(词频-逆文档频率)
简单高效;忽略语序;高维稀疏 小数据集、基线模型、可解释性要求高
词嵌入(Word-Level) - Word2Vec
- GloVe
- FastText
捕获语义相似性(如 king - man + woman ≈ queen);需预训练 中等规模数据;支持迁移学习
上下文嵌入(Contextual) - BERT / RoBERTa
- Sentence-BERT(SBERT)
动态表征(“苹果”在水果/公司语境不同);SOTA 性能 高精度需求;有 GPU 资源;支持微调

当前主流预训练语言模型微调(如用 transformers 库加载 bert-base-chinese + 分类头)


模型选择与训练

常用模型对比

模型 优点 缺点 典型工具
朴素贝叶斯(NB) 计算快;小样本有效;理论清晰 假设特征独立(实际不成立) sklearn.naive_bayes.MultinomialNB
SVM 高维有效;小样本强;核技巧灵活 训练慢(尤其大数据);难输出概率 sklearn.svm.SVC(线性核常用)
逻辑回归(LR) 可解释;支持在线学习;常作 baseline 线性模型,捕捉非线性能力弱 sklearn.linear_model.LogisticRegression
深度学习
(CNN/RNN)
自动提取特征;捕捉局部/序列模式 需大数据;训练慢;调参复杂 TensorFlow/Keras, PyTorch
预训练模型微调
(BERT 等)
SOTA 效果;迁移学习强大 资源消耗大;推理慢 HuggingFace Transformers

流程中关键步骤

  • 划分 训练集 / 验证集 / 测试集(如 7:1:2)
  • 交叉验证(如 5-fold)调参
  • 设置早停(Early Stopping)防过拟合

模型评估

核心指标(多分类场景):

指标 公式/说明 适用场景
准确率(Accuracy) $ \frac{TP+TN}{TP+TN+FP+FN} $ 类别均衡时可用
精确率(Precision) $ \frac{TP}{TP+FP} $ 关注“预测为正的有多少真”(如垃圾邮件过滤)
召回率(Recall) $ \frac{TP}{TP+FN} $ 关注“真正的正例有多少被找出”(如疾病诊断)
F1-Score $ 2 \times \frac{Precision \times Recall}{Precision + Recall} $ Precision 与 Recall 的调和平均,最常用
宏/微平均(Macro/Micro-F1) 宏:各类 F1 平均;微:全局 TP/FP/FN 计算 多分类不平衡时必看

还需:混淆矩阵PR 曲线ROC-AUC(二分类)


模型优化与调参

  • 特征工程:n-gram(如 bigram)、词性标注、实体识别作为特征
  • 超参调优:网格搜索(GridSearch)、贝叶斯优化(optuna
  • 集成学习:投票法(Voting)、堆叠(Stacking)
  • 处理不平衡:过采样(SMOTE)、欠采样、代价敏感学习(class_weight)

部署与应用

  • 轻量化:模型蒸馏(DistilBERT)、量化(ONNX Runtime)
  • API 封装:用 Flask/FastAPI 提供分类接口
  • 持续监控:数据漂移检测(如 PSI 指标)、在线学习更新

💡 你的实践延伸:你用 Cloudflare Workers 部署 AI 服务,可将训练好的轻量模型(如 tf-liteONNX)嵌入 Worker,实现低延迟文本分类 API。


核心考点总结

考点层级 关键内容
流程顺序 预处理 → 特征表示 → 建模 → 评估 → 优化 → 部署(必须按逻辑顺序答)
特征表示演进 BoW/TF-IDF → Word2Vec → BERT(体现技术发展)
评估指标选择 多分类必须提 F1 / Macro-F1;强调不能只用准确率(尤其不平衡时)
中英文差异 中文必须分词;英文需词干化;停用词表不同
工程陷阱 数据泄露(如在分词前统一去停用词导致测试集信息泄露)
  • Title: 数据采集与处理--相关习题
  • Author: 姜智浩
  • Created at : 2025-12-29 11:45:14
  • Updated at : 2025-12-29 21:34:59
  • Link: https://super-213.github.io/zhihaojiang.github.io/2025/12/29/20251229数据采集与处理--相关习题/
  • License: This work is licensed under CC BY-NC-SA 4.0.