第二章 网络爬虫
爬虫的核心任务包括三个步骤:输入 URL 获取网页内容(HTML)、解析 HTML 提取目标信息、以及数据存储。
2.1 爬虫基础知识
定义与功能 爬虫是一种自动获取网页内容的程序,通过解析 HTML 源码获得所需信息。一个成熟的爬虫系统必须具备以下功能:礼貌性(遵循 Robots 协议)、鲁棒性、性能与效率、分布式支持、新鲜度保障及功能可扩展性。
工作流程
- 选择种子 URL(Seed URL);
- 获取文档内容;
- 解析并判重,选择性保留;
- 提取新链接,判重后加入队列;
- 循环执行上述步骤。
爬取策略
- BFS(广度优先):适合在有限时间内抓取重要页面(如首页),但握手次数较多。
- DFS(深度优先):适合单站深度挖掘,减少握手次数,提升性能。
- 分布式问题:多台机器共享哈希表判重时,通信可能成为瓶颈。解决方案包括明确服务器分工和批量处理以减少通信。
2.2 爬虫分类
根据应用场景可分为:基于整个 Web 的信息采集(如门户搜索引擎)、增量式采集、用户个性化采集以及主题 Web 信息采集。
2.3 开源工具 Nutch
Nutch 是一个整合 Web 信息采集的开源工具,特点包括多线程、宽度优先遍历、遵循机器人协议、采用 Socket 连接、边爬取边解析以及页面评分机制。
第三章 网页分析
网页分析主要基于 HTML 文档格式,从不同角度抽取信息:将 HTML 视为字符流(正则表达式)、树结构(DOM 模型)或使用外部工具。
3.1 正则表达式
正则表达式是字符串操作的逻辑公式,用于定义过滤规则。其特点是匹配速度快,但表达能力仅限于正规文法。适用于信噪比要求不高的场景,但在需要去噪或网页自动分类时,建议使用 DOM 树。
3.2 DOM 模型
DOM(文档对象模型)将 HTML 转化为树状结构,支持随机访问。相比正则表达式,DOM 解析速度较慢,但表达能力相当于上下文无关文法,更适合复杂的网页结构处理。常用库包括 jsoup、HTMLParser 等。
3.3 Beautiful Soup 工具
Beautiful Soup 提供了解析文档的工具箱,支持多种解析器:
html.parser:内置,速度慢但通用。HTML5Lib:处理不规范 HTML。lxml:效率高,适用于 HTML 和 XML 解析。
优缺点:操作简单方便,但会加载整个文档树,消耗资源较多。
3.4 Scrapy 框架
Scrapy 是一个快速、高层次的爬虫框架,实现了底层多线程请求和异步网络通讯。核心组件包括引擎、调度器、下载器、爬虫、管道及中间件。
开发四步走:
- 新建项目(
scrapygenspider <name> <domain>); - 定义 Items(目标数据);
- 编写 Spider(爬取逻辑);
- 创建 Pipeline(存储处理)。
用户只需关注 Item 和 Spider,其余部分由框架封装。
数据存储
- CSV/JSON/XML:结构化文件存储,JSON 可读性好且交换灵活。
- 数据库:SQLite(轻量级)、MySQL、MongoDB。
- Pickle:Python 对象序列化,二进制格式,不可读但高效。
Meta 字典:用于跨页面传递数据,通过 Request 的 meta 参数传入 Response。
3.5 工具比较
- Request + BS4:适合页面级爬虫,上手快,但并行性考虑不足,大型开发需自行造轮子。
- Scrapy:适合网站级爬虫,性能高,结构封装好,适合大型项目。
3.6 元搜索引擎
元搜索引擎通过统一界面控制多个检索工具,实现结果合并与筛选,是对分布网络检索工具的全局控制。
第四章 爬虫与网站的博弈
反爬虫策略旨在保护正常用户的同时限制爬虫。后端常见策略包括 User-agent 检测、Referer 检测、Cookie 验证及 IP 限制;前端则涉及懒加载和字体加密(FONT-FACE)。
4.1 Robot 协议
网站通过 Robots 协议告知搜索引擎可抓取和禁止抓取的页面路径。
4.2 User-agent
UA 是 HTTP 请求头的一部分,标识浏览器类型、操作系统等信息。服务器可根据 UA 返回不同排版以适应设备。
4.3 IP 屏蔽
网站策略:限制同一 IP 频繁访问,封禁特定 IP。 爬虫策略:使用多 IP 并行、IP 代理池(定期检测可用性)、增大爬取间隔。
4.4 登录与 Cookie 验证
流程为提交账号密码 -> 后端生成 Cookie -> 客户端保存并在后续请求中携带。可使用 cookiejar 工具管理。
4.5 模拟浏览器
对于动态加载页面,可使用 Selenium 模拟交互(键盘、鼠标、AJAX 响应)。Selenium 提供三种等待方式:强制等待、显式等待、隐式等待,以解决元素加载时序问题。
懒加载处理:
- 简单方法:寻找
data-src等暂存属性。 - 模拟浏览器:通过 Selenium 滑动页面触发加载。
验证码处理:
- 图片识别:截图 -> 图像预处理 (Pillow) -> OCR 识别。
- 滑动验证:定位缺口位置 -> 模拟拖动(注意非匀速及 Y 轴抖动)-> 验证成功。
第五章 数据抽取与包装器
信息抽取是将非结构化文本转化为结构化表格的过程,包括实体抽取、关系抽取和事件抽取。
5.1 Web 信息抽取
核心是从半结构化 HTML 中隐含的信息点抽取出来,转化为结构化语义形式。通常步骤包括预处理、模式匹配、词法句法分析、上下文推理及结构化输出。
5.2 Web 数据抽取
基本前提是页面由模板生成。目标是逆向推导页面模板 T,还原数据 D。
定义要素:
- T:页面模板
- W:页面
- d:数据
- C:相似页面不变部分(导航、版权)
- L:格式规范
- S:观察到的数据模式
5.3 包装器
包装器是利用抽取规则将 Web 页面信息转化为结构化格式的软件过程。核心在于抽取规则的定义。
基于分界符规则:视 HTML 为字符流,利用起始和结束标签(如 <i> 和 </i>)提取中间内容。
基于树路径规则:视 HTML 为树结构,通过 XPath 等路径搜索节点。
分类:
- 手工方法:人工编写规则,适合小规模即时抽取。
- 归纳方法:机器学习产生规则(有监督),需清洗和标注数据。
- 自动生成:无监督挖掘重复模式,适合大规模持续抽取。
评价标准:召回率、准确率、自动化程度、适应性、修正率。F 值为二者的加权调和平均。
第六章 包装器页面抽取方法
本章重点讲解如何通过包装器实现页面抽取。
6.1 网页分类
按数据组织形式分为单记录页面(详情页)和多记录页面(列表页)。 按内容分为数据型页面(结构化记录)和文档型页面(文本内容)。 组合后可分为:单记录数据型、多记录数据型、单记录文档型、多记录文档型。
6.2 多记录数据型页面抽取
步骤:识别数据记录边界 -> 抽取数据项。
确定数据区域:
- 比较 DOM 树算法:递归遍历比较两棵树的节点差异。
- 语义块算法:计算关键字频率和共同路径,确定语义块层次。
计算边界:利用规则划分数据记录。
数据项抽取:
- 识别:位置相同、标签序列相同即为同字段。
- 匹配:基于出现路径、视觉信息、上下文信息及文本特征相似性判断。
6.3 单记录数据型页面抽取
采用增量式抽取,推导页面模板。若模板变化,使用部分树对齐算法(增量推导):选择种子树,逐个对齐剩余树,生成新模板直至收敛。
6.4 单文档型页面抽取
结合视觉信息,正文通常占据最大位置。存在问题如短正文难提取。改进方案包括抽取路径学习(保存路径至数据库)和贝叶斯最优决策(自动选择视觉或数据库路径)。
第七章 Web 数据存储
结构化文件:Excel、CSV、JSON、XML、Pickle。 结构化数据库:SQLite、MySQL、MongoDB。 非结构化文件:TXT、JPG、HBase 等非结构化数据库。
第八章 Web 数据预处理
8.1 结构化数据处理
- 清洗:缺失值处理、噪声处理、不一致处理。
- 特征工程:特征选择、提取、组合、构造。PCA 用于降维去相关。
- 标准化与归一化:Z-score 标准化使均值为 0 方差为 1;归一化统一尺度,加速收敛。
- 连续值与离散值:连续值可二值化、分箱;离散值需编码(标签编码、独热编码)。
8.2 非结构化数据处理
文本数据涉及 SQL 查询、NLP 特征(分词、向量描述)。图像数据涉及特征识别与跨模态检索。
第九章 文本预处理
步骤:文档解析 -> 句子分割 -> 分词 -> 词规范化 -> 去停用词。
9.1 基于词典的分词
策略包括正向/逆向匹配、最大/最小匹配。遇到不认识的字串则分割。
9.2 基于统计的分词
思想:相连字出现频度高则可能为一个词。常用模型包括 N 元文法、HMM、条件随机场及深度学习模型。
9.2.1 基于 HMM 的分词
隐马尔可夫模型(HMM)假设未来只与现在有关。应用于分词时,观察值为汉字,状态值为 BMES(Begin, Middle, End, Single)。
关键算法:
- 概率计算:前向 - 后向算法。
- 模型训练:EM 算法(Baum-Welch)。
- 模型使用:Viterbi 算法(动态规划)求最优状态路径。
第十章 文本表示
文本预处理后得到词条集合,需转化为向量供模型使用。
10.1 文本向量化
- 离散表示:词袋模型、TF-IDF,忽略语序。
- 分布式表示:低维向量,捕捉语义信息。
10.2 隐语义分析 LSA
对文本降维,仅保留主要语义。通过奇异值分解(SVD)建立词频矩阵。优点是可以缓解稀疏性问题,缺点是无法解决多义词,且计算复杂。
10.3 主题模型
- pLSA:从统计学角度看待 LSA,引入 EM 算法估计单词 - 主题信息。
- LDA:在 pLSA 基础上引入先验分布(狄利克雷分布),更符合文本特性。
10.4 文档哈希
将任意长度输入转化为固定长度指纹。通过 Simhash 算法计算汉明距离判断重复。Simhash 步骤:分词加权 -> Hash 计算 -> 降维合并。
第十一章 语言模型
语言模型用于反馈句子可信度或生成新句子。
11.1 n-gram 语言模型
基于大数定理,相对频度等于概率。长句子会导致概率趋近 0,需增加数据量、平滑技术或使用神经网络模型。
11.2 神经网络语言模型 NNLM
解决了 n-gram 无法建模远距离依赖和词相似性的问题。结构包含 Embedding 层、中间层和输出层。
第十二章 词嵌入和文档嵌入
深度学习将事物映射为复杂向量再进行处理。
- Word2Vec:CBOW 利用周围词预测中心词;Skip-Gram 利用中心词预测周围词。引入负采样提高效率。
- Doc2Vec:同时训练词向量和段落向量,用于聚类分类。
- GloVe:利用全语料库共现矩阵,改进 Word2Vec 局部信息缺陷。
第十三章 文本分类
13.1 文本分类
应用包括情感分析、主题分析、意图识别等。基本结构为特征表示(词袋、TF-IDF、Embedding)+ 分类模型(浅层或深度学习)。
13.2 fastText
改进 Word2Vec 局限性,以字符级确定特征向量,支持未登录词,训练速度快。
13.3 TextCNN
将 CNN 迁移到 NLP,使用不同大小卷积核提取信息,池化层和全连接层进行特征使用。
13.4 Token 化
大语言模型中的分词流派。Token 比词更细粒度,具有开放词汇表、强形态处理能力及跨语言适配优势。BPE 算法通过迭代合并高频字符对构建词汇表。
第十四章 Web 图片数据
14.1 Web 图像
位图(JPEG/GIF)基于像素网格;SVG 基于 XML 代码绘图;矢量图形可无限缩放。
14.2 图像特征
分为低层特征(颜色、纹理、形状)和语义特征;局部特征和全局特征。
14.3 颜色特征
最直观的物理特征。常用颜色空间 RGB(加光模式)和 HSV(色相、饱和度、亮度)。颜色直方图描述色彩分布,颜色矩(均值、方差等)作为统计摘要。
14.4 纹理特征
描述表面性质,如 LBP(局部二值模式),对光照和旋转具有不变性。
14.5 形状特征
低级特征包括颜色、纹理和形状。局部形状特征如 HOG(方向梯度直方图)和 SIFT(尺度不变特征转换)。HOG 适合人体检测,SIFT 用于地图感知导航。
总结
Web 数据管理涵盖爬虫、解析、存储、预处理及 NLP 等多个环节。从基础的数据获取到高级的文本与图像特征提取,掌握这些技术有助于构建完整的数据处理 pipeline。


