第二章 网络爬虫
爬虫的核心任务包括三个步骤:输入 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。


