跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python 网络爬虫入门:原理、协议与实战代码

网络爬虫的基本概念、分类及工作原理。内容涵盖通用、聚焦、增量及深层网络爬虫的区别,详细解析了 Robots 协议的作用与配置方法,并阐述了搜索引擎的核心流程。此外,文章补充了 Python 爬虫开发所需的基础技能与版本选择建议,并通过实际代码示例演示了如何使用 Requests 库进行网页请求与数据解析,帮助初学者快速掌握网络爬虫的核心技术与实战应用。

ServerBase发布于 2025/2/6更新于 2026/10/2390 浏览
Python 网络爬虫入门:原理、协议与实战代码

前言

在大数据时代,信息的采集是一项重要的工作。如果只靠人工采集信息,不仅低效繁琐,而且搜集成本很高。为此,网络爬虫技术就派上了用场。在一些场景中,如搜索引擎中爬取收录站点、数据分析与挖掘中对数据采集、金融分析中对金融数据采集等,该技术都应用广泛。

本文将带领大家了解网络爬虫及其应用,并深入理解网络爬虫的结构、核心协议及基础实现。

学习目标

  1. 能够了解爬虫所需技能与 Python 版本选择。
  2. 能够了解网络爬虫的应用和 Robots 协议。
  3. 能够掌握搜索引擎核心原理。
  4. 能够掌握快速爬取网页的示例代码。

所需技能与 Python 版本

在学习 Python 网络爬虫之前,先介绍一些必备基础技能以及本书选择 Python 3.X 版本的原因。

所需技术能力

使用 Python 语言进行网络爬虫开发,首先 Python 网络爬虫开发包含的内容较多,需要开发人员具备以下技术能力:

  1. 熟悉 Python 基础:掌握语法、数据结构、函数等。
  2. 对计算机网络有一定的了解:包括 HTTP/HTTPS 协议、DNS、TCP/IP 等(本文会有相应讲解)。
  3. 至少熟悉一种 Python 网络爬虫框架:如 Scrapy、Requests 等(本文有详细讲解)。
  4. 熟悉数据库、缓存、消息队列等技术的使用:用于数据存储和系统优化。
  5. 对 HTML、CSS、JavaScript 有一定的了解:用于解析网页结构和处理动态内容。
  6. 至少熟悉一种 IDE:推荐使用 PyCharm。

以上是在学习 Python 网络爬虫开发之前所需具备的一些技术能力,其中部分内容在本文中有所涉及,但大部分内容还是需要大家事先了解并掌握。

需要注意的是,安装第三方库和框架时,大部分都是在命令行窗口中安装,在 PyCharm 中的安装较为简单,因此不做详细讲解。

选择 Python 的原因

目前可以选择多种语言进行网络爬虫开发,如 Python、PHP、C# 等,选择 Python 有以下原因:

  1. 普及度高:Python 语言普及度越来越高,社区资源丰富。
  2. 库强大:Python 有非常强大的标准库和第三方库,比如目前流行的 Scrapy 爬虫框架。
  3. 简单易学:Python 语言简单易学,并且发展时间比较久,非常健壮优雅。

选择 Python 3.x 的原因

编写使用最新的 Python 3.X 主要有以下几个原因:

  1. 生命周期:Python 2.X 已停止开发,至 2020 年终止支持。
  2. 兼容性:Python 中的第三方库已基本支持 Python 3.X,满足开发需求。
  3. 效率:Python 3.X 的执行效率更高,且更符合现代编程规范。

初识网络爬虫

网络爬虫的概念

网络爬虫又名网络蜘蛛、网络蚂蚁、网络机器人等。顾名思义,网络爬虫可理解为在网络上的爬虫,按照一定的规则爬取有用信息并收录进数据库,该规则即网络爬虫算法。

在进行数据分析或数据挖掘时,通过网络爬虫可以根据不同需求有针对性地采集、筛选数据源。网络爬虫按照系统结构和实现技术,可以分为以下几种类型:通用网络爬虫、聚焦网络爬虫、增量式网络爬虫和深层网络爬虫等。

1. 通用网络爬虫

通用网络爬虫(General Purpose Web Crawler)又称全网爬虫,其爬取的目标资源在整个互联网中。通用网络爬虫的爬取范围和数量巨大,对爬取速度和存储空间要求较高,而对爬取页面的顺序要求相对较低。在搜索引擎和大型网络服务提供商采集数据时,通用网络爬虫有很高的应用价值。

通用网络爬虫的结构大致可以分为 URL 队列、初始 URL 集合、页面爬取模块、页面分析模块、页面数据库几个部分。通用网络爬虫在爬取时会采取一定的爬取策略,常用的爬取策略有深度优先策略和广度优先策略。

  • 深度优先策略:是指网络爬虫从起始页开始,依次访问下一级网页链接,处理完这条线路之后再转入下一个起始页,继续依次访问下一级网页链接。当所有链接遍历完后,爬取任务结束。深度优先策略比较适合垂直搜索或站内搜索,但爬取页面内容层次较深的站点时会造成资源的巨大浪费。
  • 广度优先策略:按照网页内容目录层次深浅来爬取页面。首先被爬取的是处于较浅目录层次的页面,当爬取完同一层次的网页后,爬虫继续爬取下一层。广度优先策略能够有效控制页面的爬取深度,避免遇到无穷深层分支时无法结束的问题,实现方便,无须存储大量中间节点,其缺点是需较长时间才能爬取到目录层次较深的页面。
  • 2. 聚焦网络爬虫

    聚焦网络爬虫(Focused Crawler)又称主题网络爬虫,顾名思义,聚焦网络爬虫是指按照预先定义好的主题,有选择性地进行网页爬取的一种爬虫。与通用网络爬虫相比,聚焦网络爬虫只需爬取与主题相关的页面,大大节省了爬虫爬取时所需的硬件和网络资源,但聚焦网络爬虫不适合大范围爬取。

    聚焦网络爬虫相比通用网络爬虫,增加了链接评价模块以及内容评价模块。内容评价模块可以评价内容的重要性,同理,链接评价模块也可以评价出链接的重要性。聚焦爬虫爬取策略实现的关键就是评价页面的内容和链接的重要性,不同的方法计算出的重要性不同,由此导致链接的访问顺序也不同。

    3. 增量式网络爬虫

    增量式网络爬虫(Incremental Web Crawler)是指对已下载网页采取增量式更新,只爬取新产生的或已经发生变化的网页,对于未发生内容变化的网页,则不会爬取。增量式网络爬虫在一定程度上能够保证所爬取的页面是尽可能新的页面。增量式网络爬虫的体系结构包含本地页面集、待爬取 URL 集、本地页面 URL 集、爬取模块、排序模块及更新模块。

    4. 深层网络爬虫

    在互联网中,Web 页面按存在方式可以分为表层网页和深层网页。表层网页是指不需要提交表单,使用超链接即可到达以静态网页为主构成的 Web 页面;深层页面则隐藏在表单后面,不能通过静态链接直接获取,是需要提交一定的关键词才能获得的 Web 页面。在互联网中,深层页面的数量往往比表层页面要多很多。在爬取深层页面时,最重要的部分是需要自动填写好对应的表单。

    深层网络爬虫(Deep Web Crawler)体系结构由爬行控制器、解析器、表单分析器、表单处理器、响应分析器、LVS(Label Value Set)控制器等基本功能模块及 URL、LVS 列表两个爬虫内部数据结构组成。其中 LVS 表示标签/数值集合,用来表示填充表单的数据源。

    深层网络爬虫的表单填写有两种类型:

    1. 基于领域知识的表单填写:即建立一个填写表单的关键词库,在需要填写时,根据语义分析选择对应的关键词进行填写。
    2. 基于网页结构分析的表单填写:这种填写方式一般是在领域知识有限的情况下使用,程序根据网页结构进行分析,并自动地进行表单填写。

    网络爬虫的应用

    网络爬虫的应用非常广泛,它可以进行许多自动化操作。例如,它不仅能爬取网站上的图片、文字、视频等数据,而且能分析网站的用户活跃度、发言数、点赞数、热评等信息。爬虫还可应用于其他领域如众多金融投资领域,可自动爬取信息并进行精准投资分析等。

    下面展示一些网络爬虫实际运用的场景。

    常见的 BT(BitTorrent)网站,通过爬取互联网的 DHT(Distributed Hash Table,一种分布式存储方法)网络中分享的 BT 种子信息,提供对外搜索服务。 又如一些云盘搜索网站,通过爬取用户共享出来的云盘文件数据,对文件数据进行分类划分,从而提供对外搜索服务。

    Robots 协议

    Robots 协议(也被称为爬虫协议、机器人协议等)的全称是'机器人排除协议'(Robots Exclusion Protocol)。网站通过 Robots 协议将搜索引擎抓取网站内容的范围作了约定,包括网站是否希望被搜索引擎抓取,内容是否允许被抓取,被抓取到的公开数据是否允许被转载。

    除此之外,Robots 协议还可以屏蔽一些网站中较大的文件,如图片、音频、视频等,节省服务器带宽;屏蔽站点的一些死链接,方便搜索引擎抓取网站内容;设置网站地图连接,方便引导爬虫爬取页面。

    robots.txt(统一小写)是一种存放于网站根目录下的以 ASCII 编码的文本文件,它是 Robots 协议的具体体现。因为一些系统中的 URL 对大小写敏感,所以 robots.txt 的文件名应统一为小写。如果需要单独定义网络爬虫访问网站子目录时的行为,可将自定义的设置合并到根目录下的 robots.txt。

    Robots 的约束力仅限于自律,没有强制性,搜索引擎一般都会遵循这个协议。除 Robots 协议以外,网站管理员仍有其他方式拒绝网络爬虫对网页的获取。

    当网站内容有更新时,在 robots.txt 文件中提供的 Sitemap 内容可以帮助爬虫定位网站最新的内容,而无需爬取每一个网页。比如政府网站的 Robots 协议配置如下:

    User-agent: *
    Allow: /
    Disallow: /admin/
    Sitemap: http://www.gov.cn/sitemap.xml
    

    图中几个重要信息表示如下:

    • User-agent:允许的爬虫,'*'说明允许所有爬虫爬取数据。
    • Allow:允许访问的目录。
    • Disallow:禁止访问的目录。
    搜索引擎核心

    每个搜索引擎都有自己的爬虫(如 Baiduspider、360Spider、Bingbot 等),通过网络爬虫可以更深层次地理解搜索引擎内部的工作原理,从而进一步优化搜索引擎。

    当用户通过门户网站检索信息时,会通过用户交互接口(相当于搜索引擎的输入框)输入关键字,输入完成后通过检索器进行分词等操作,索引器会从索引数据库(对原始数据库进行索引后将数据存储于该数据库)中获取数据进行相应的检索处理。

    用户输入完对应信息后,用户的行为(比如用户的 IP 地址、Agent 类别和用户输入的关键词等)会被存储到用户日志数据库中,随后日志分析器会根据大量的用户数据去调整原始数据库和索引数据库,改变排名结果或进行其他操作。

    需要注意的是,检索是一个动作,而索引是一个属性。例如商店里有大量的商品,为了能够快速地找到这些商品,需要将这些商品分为饮料类商品、电器类商品、日用品类商品、服装类商品等组别,这些商品的组名被称为索引。索引被索引器控制,索引可以大大提升查询效率。

    搜索引擎的工作流程如下:

    1. 搜索引擎利用爬虫模块去爬取互联网中的网页。
    2. 将爬取到的网页数据存储在原始数据库中。
    3. 爬虫模块主要包括控制器和爬行器,控制器主要进行爬虫的控制,爬取器则负责具体的爬取任务。

    实战案例:Python 网络爬虫基础实现

    理论结合实践才能真正掌握技术。下面我们将使用 Python 的 requests 库和 BeautifulSoup 库来实现一个简单的网页爬取示例。

    环境准备

    确保已安装必要的库:

    pip install requests beautifulsoup4
    

    代码示例

    以下代码演示了如何发送 HTTP 请求、处理响应状态码以及提取网页标题和内容。

    import requests
    from bs4 import BeautifulSoup
    
    def fetch_webpage(url):
        # 设置请求头,模拟浏览器行为
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        }
        
        try:
            response = requests.get(url, headers=headers, timeout=10)
            # 检查响应状态码
            if response.status_code == 200:
                # 设置编码,防止乱码
                response.encoding = response.apparent_encoding
                soup = BeautifulSoup(response.text, 'html.parser')
                
                # 提取网页标题
                title = soup.title.string if soup.title else 'No Title'
                print(f"Title: {title}")
                
                # 提取正文段落
                paragraphs = soup.find_all('p')
                for p in paragraphs[:5]:  # 仅打印前 5 段
                    print(p.get_text(strip=True))
            else:
                print(f"Failed to retrieve data. Status code: {response.status_code}")
        except Exception as e:
            print(f"Error occurred: {e}")
    
    if __name__ == "__main__":
        target_url = "https://example.com"
        fetch_webpage(target_url)
    

    注意事项

    1. 遵守 Robots 协议:在爬取任何网站前,务必检查 robots.txt 文件,确认目标页面是否允许爬取。
    2. 控制频率:避免在短时间内发送过多请求,以免对目标服务器造成压力或被封禁 IP。
    3. 异常处理:网络请求具有不稳定性,代码中应包含完善的异常捕获机制。

    结语

    网络爬虫技术是大数据时代的重要工具。通过本文的学习,我们了解了爬虫的基本概念、分类、工作原理以及基础的 Python 实现方法。在实际应用中,还需要结合反爬策略、分布式架构等更高级的技术。希望读者能通过不断的实践,掌握这一技能,为数据处理和分析提供支持。

    目录

    1. 前言
    2. 学习目标
    3. 所需技能与 Python 版本
    4. 所需技术能力
    5. 选择 Python 的原因
    6. 选择 Python 3.x 的原因
    7. 初识网络爬虫
    8. 网络爬虫的概念
    9. 1. 通用网络爬虫
    10. 2. 聚焦网络爬虫
    11. 3. 增量式网络爬虫
    12. 4. 深层网络爬虫
    13. 网络爬虫的应用
    14. Robots 协议
    15. 搜索引擎核心
    16. 实战案例:Python 网络爬虫基础实现
    17. 环境准备
    18. 代码示例
    19. 注意事项
    20. 结语

    更多推荐文章

    查看全部
    • 7 个优质网络安全学习平台推荐,助力新手进阶
    • 宇树 Qmini 双足机器人训练经验总结
    • Python GIL 深度解析:原理、实现与优化策略
    • SO-ARM100 开源协作机器人搭建与控制系统实战
    • MySQL 基本查询详解:增删改查与聚合分组实战
    • ELK 日志分析平台搭建与配置实战
    • Python 家庭用电数据分析与 Prophet 时间序列预测
    • GitHub Copilot 安装与使用指南
    • 基于 Uptime Kuma 与内网穿透的远程服务器监控方案
    • RabbitMQ Spring-AMQP 事务机制与消息限流配置详解
    • 谷歌 TurboQuant 内存压缩与 RWKV-6 开源重构大模型部署范式
    • PyQt6 实战:从零搭建美观 GUI 的完整控件指南与模板解析
    • 前端大屏展示技术指南
    • 数据结构:栈、队列及顺序表应用算法
    • OpenClaw 入门指南:安装、配置与自动化实战
    • Spring 整合 MyBatis 全流程详解及 JUnit 单元测试
    • Redis 安装教程(Windows+Linux)
    • Linux 线程与进程深度剖析:虚实内存转换、实现机制与优缺点
    • Rye:一款实验性质的 Python 包管理系统
    • Qwen2 大模型微调实战:基于指令微调的文本分类

    相关免费在线工具

    • 加密/解密文本

      使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

    • RSA密钥对生成器

      生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

    • Mermaid 预览与可视化编辑

      基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

    • 随机西班牙地址生成器

      随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

    • Gemini 图片去水印

      基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

    • curl 转代码

      解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online