数据采集与处理--相关习题
题目
什么是主题爬虫 其主要是用在哪些场合
解析
主题爬虫(Focused Crawler / Topic-specific Crawler)是一种有目标导向的网络爬虫,与通用爬虫(如 Googlebot)不同,它不追求覆盖整个互联网,而是只抓取与特定主题高度相关的网页。
其核心思想是:
在爬取过程中,动态评估网页内容与预设主题的相关性,据此决定是否下载该页面、是否将其链接加入待爬队列,从而提高爬取效率与数据质量,减少无关页面的抓取与存储开销。
解答
定义:
主题爬虫(Focused Crawler)是一种根据用户指定主题(如“人工智能”“新冠疫情”“新能源汽车政策”),在爬取过程中结合链接分析与内容相关性预测,优先抓取并保留与主题高度相关的网页,过滤无关内容的智能网络爬虫系统。
关键技术环节:
- 主题建模:用关键词集合、主题词典、分类器(如SVM、BERT)或主题向量(如LDA、Sentence-BERT)表示目标主题。
- 相关性评估:
- 对已下载页面:提取文本 → 特征表示(TF-IDF、词嵌入等)→ 计算与主题的相似度。
- 对待爬链接(URL/锚文本/上下文):通过链接上下文(如锚文本、父页面主题)预测目标页相关性(“预测式爬取”)。
- 优先级调度:根据相关性得分动态调整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.webdriver、window.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 标签、特殊符号、广告语、无关字符
- 分词(中文必需):使用
jieba、pkuseg、LTP等(英文按空格/标点切分) - 去停用词:过滤“的”“是”“and”“the”等高频无意义词(可用哈工大/百度停用词表)
- 词干化/词形还原(英文):
running→run(nltk.stem.PorterStemmer) - 大小写统一:
Apple→apple(中文一般无需)
特征表示
目的:将文本转化为模型可计算的数值向量
主流方法演进:
| 类型 | 方法 | 特点 | 适用场景 |
|---|---|---|---|
| 传统统计特征 | - 词袋模型(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-lite或ONNX)嵌入 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.