当前位置:

首页 > 编程开发 > Python爬取网页的详细步骤与代码实例教程

Python爬取网页的详细步骤与代码实例教程

一份结构清晰、注重实操的Python爬取网页详细教程,涵盖环境搭建、HTTP请求发送、HTML解析、数据持久化存储与异常处理等完整步骤与代码实例。

编写一个网络爬虫,本质上就是写程序模拟浏览器向服务器发起请求,接收返回的网页源代码,并从中筛选提取出我们需要的数据。本文将使用 Python 中经典的 requests 与 BeautifulSoup4 库,带你按标准流程完成从网络请求到本地数据持久化的完整闭环,掌握最通用、可靠的静态网页爬取方法。

一、爬虫运行的基本工作流与技术选型

在开始写代码之前,我们需要理清一次网页爬取任务究竟包含哪几个阶段。无论是抓取新闻标题、商品价格还是天气数据,标准的爬虫流程都可以拆解为四大核心环节:确定目标并构造请求、获取响应内容、定位并解析节点,最后将清洗好的数据保存下来。

Python爬取网页的详细步骤与代码实例教程
图 1:Python 基础爬虫执行操作步骤流程图

在工具选择上,我们选用 Python 生态中最成熟易用的组合:

  • Requests:用于网络通信。相比 Python 自带的 urllib,它的 API 设计更加人性化,能够轻松处理编码、会话和 Header 配置。
  • BeautifulSoup4:用于文档解析。它能够将凌乱的 HTML 字符串转换为树状结构,支持通过标签名、CSS 类选择器等直观方式定位元素。

二、前期准备:安装依赖环境

在你的终端(Terminal 或命令提示符)中执行以下命令,安装爬取和解析所需的第三方模块:

pip install requests beautifulsoup4

如果使用的是 Jupyter Notebook 或虚拟环境,请确保安装命令执行在对应的解释器环境中。安装完成后,可以在 Python 交互环境中输入 import requests, bs4 验证是否安装无误,未报错即表示就绪。

三、核心步骤拆解

1. 伪装请求头(Headers)与发送 HTTP 请求

绝大多数网站都有基础的防抓取机制,其中最直接的一种是检查 HTTP 请求头中的 User-Agent。如果使用 requests.get() 而不提供任何头部信息,默认的标识为类似 python-requests/2.x.x 的字符串,很多服务器会直接拒绝响应(返回 403 Forbidden)。

因此,第一步也是最关键的基础细节,是在请求中带上主流浏览器的 User-Agent 字符串:

import requests

url = "https://quotes.toscrape.com/"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}

response = requests.get(url, headers=headers, timeout=10)
print(f"响应状态码: {response.status_code}")
注意:超时配置不可省略
timeout=10 参数表示若目标服务器在 10 秒内未响应则主动中断并抛出异常。如果不设置该参数,一旦网络阻塞或目标挂起,你的程序可能会永久卡在等待响应的步骤。

2. 解析 HTML 结构与节点匹配

当服务器返回 200 成功代码后,我们可以通过 response.text 获取完整的网页 HTML 文本。随后将其送入 BeautifulSoup 构建解析对象。

网页在浏览器中呈现的内容,在底层是一层层嵌套的 DOM 树。我们需要根据目标数据在页面中的位置,找到包含目标特征的标签名(tag)、类名(class)或属性(attribute)。

Python爬取网页的详细步骤与代码实例教程
图 2:HTML 树状 DOM 结构与定位层级映射原理

在解析时,有两个最基础且频繁使用的方法:

  • find():查找符合条件的第一个元素,返回单个 Tag 对象;未找到则返回 None。
  • find_all():查找符合条件的所有元素,返回一个列表(可直接通过循环遍历)。

3. 提取属性与清洗数据

定位到具体节点后,通常需要取出其包含的文字内容或特定属性值(如超链接 href 或图片地址 src):

  • 使用 element.get_text(strip=True) 提取纯文本并剔除前后空格及换行。
  • 使用字典取值方式 element["href"] 获取标签的属性。

4. 数据结构化与存储为 CSV

提取出的数据通常以字典形式组织,每行一条记录。利用 Python 内置的 csv 模块中的 csv.DictWriter,可以轻松把字典列表写入标准的 CSV 表格文件中,供后续在 Excel 或数据库中处理。

四、完整实战代码实例

我们以面向爬虫学习的公开练习网站 https://quotes.toscrape.com/ 为例,完整编写一个采集名言、作者、作者介绍链接并保存至 CSV 文件的爬虫脚本。

import csv
import requests
from bs4 import BeautifulSoup

def scrape_quotes():
    # 1. 目标地址与配置
    base_url = "https://quotes.toscrape.com"
    target_url = f"{base_url}/"
    headers = {
        "User-Agent": (
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
            "AppleWebKit/537.36 (KHTML, like Gecko) "
            "Chrome/122.0.0.0 Safari/537.36"
        )
    }

    print(f"正在请求页面: {target_url}")
    
    # 2. 发起 HTTP GET 请求
    try:
        response = requests.get(target_url, headers=headers, timeout=10)
        # 确保编码正确,如果网页乱码,可使用 response.apparent_encoding
        response.encoding = response.apparent_encoding
        response.raise_for_status()  # 若状态码不是 200,触发 HTTPError 异常
    except requests.exceptions.RequestException as e:
        print(f"请求失败: {e}")
        return

    # 3. 解析页面
    soup = BeautifulSoup(response.text, "html.parser")
    
    # 找到所有包含名言卡片的 div 容器
    quote_blocks = soup.find_all("div", class_="quote")
    
    collected_data = []

    # 4. 遍历提取字段
    for block in quote_blocks:
        # 提取名言文本
        text_el = block.find("span", class_="text")
        text = text_el.get_text(strip=True) if text_el else ""

        # 提取作者
        author_el = block.find("small", class_="author")
        author = author_el.get_text(strip=True) if author_el else ""

        # 提取作者详情页相对链接并拼接为完整 URL
        link_el = block.find("a")
        author_link = f"{base_url}{link_el['href']}" if (link_el and "href" in link_el.attrs) else ""

        collected_data.append({
            "quote": text,
            "author": author,
            "author_link": author_link
        })

    print(f"成功解析出 {len(collected_data)} 条记录。")

    # 5. 持久化存储到 CSV 文件
    csv_file = "scraped_quotes.csv"
    with open(csv_file, mode="w", encoding="utf-8-sig", newline="") as f:
        fieldnames = ["quote", "author", "author_link"]
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        
        writer.writeheader()
        writer.writerows(collected_data)

    print(f"数据已成功写入到 {csv_file}")

if __name__ == "__main__":
    scrape_quotes()

代码运行与预期输出

在安装好依赖并运行该脚本后,控制台将输出如下运行日志(示例输出):

正在请求页面: https://quotes.toscrape.com/
成功解析出 10 条记录。
数据已成功写入到 scraped_quotes.csv

在当前目录下生成的 scraped_quotes.csv 可以使用 Excel 或任意文本编辑器打开,内部包含了规整的表头和 10 条提取好的名言与作者数据。

五、健壮性考量:异常处理机制

初学者编写爬虫常遇到的一个困扰是“爬了几页突然崩溃报错退出”。网络环境具有高度不确定性,服务器也可能随时出现 500 错误、丢包或超时。编写可用于实际生产环境的爬虫,必须建立分层防御机制。

Python爬取网页的详细步骤与代码实例教程
图 3:爬虫运行中的双层异常防御结构

六、爬虫进阶与全景总结

掌握了基础静态网页的抓取后,在面对更复杂的实际场景时,爬虫技术栈会面临不同的技术分流:

  • 动态渲染页面:如果网页内容是通过 JavaScript 异步请求(Ajax)生成的,直接请求 HTML 源码可能看不到具体数据。此时优先打开浏览器 F12 开发者工具的 Network 面板抓取实际的 JSON 数据接口;若接口加密极其复杂,再考虑使用 Playwright 或 Selenium 进行浏览器自动化渲染。
  • 爬取礼仪与频控:在批量爬取多页内容时,务必在循环中加入 time.sleep(1) 等延时,避免瞬间向目标服务器发送过多并发请求,造成服务器负载过大甚至导致 IP 被封禁。
Python爬取网页的详细步骤与代码实例教程
图 4:Python 网页爬虫关键技术矩阵与执行要点总结

只要严格遵循“构造请求头发送请求 → 验证状态码获取源码 → 层级定位元素提取数据 → 空指针防御与持久化保存”这一标准化步骤,绝大部分静态网页的数据采集任务都可以按此逻辑快速、稳定地实现。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 Python爬虫
相关文章 更多
爬虫python:用 requests 和 BeautifulSoup 抓取并保存一页数据
爬虫python:用 requests 和 BeautifulSoup 抓取并保存一页数据

介绍 requests 和 BeautifulSoup 的最小网页采集实现,覆盖响应校验、字段清洗、频率控制和合规边界。

Python爬虫requests库使用教程
Python爬虫requests库使用教程

requests库是Python爬虫常用工具,安装命令为pipinstallrequests。通过requests.get()发送GET请求,可传入params参数添加URL参数;使用requests.post()发送POST请求,data传递表单数据,json参数发送JSON数据。可设置headers模拟浏览器访问,避免反爬。响应对象提供status_code、headers、text、content、json()等属性解析结果。结合BeautifulSoup或正则表达式提取数据,可构建完整爬虫流程,需

Python爬虫日志记录与调试方法
Python爬虫日志记录与调试方法

日志记录能提升爬虫的可维护性和调试效率,通过logging模块实现多级别信息分类、异常捕获及文件保存,结合模块化配置实现透明化运行。

Python爬虫如何抓取HTTPS网站_Python爬虫访问加密HTTPS网页的安全设置
Python爬虫如何抓取HTTPS网站_Python爬虫访问加密HTTPS网页的安全设置

答案:使用requests库可安全抓取HTTPS网站,需正确处理SSL证书验证。默认情况下requests会自动验证服务器证书,确保连接安全;若遇自签名或私有CA证书,可指定本地证书路径或谨慎关闭验证(仅限测试);结合headers、cookies和代理提升兼容性与隐蔽性;对高级需求可用urllib3或自定义SSL上下文控制TLS行为;保持库更新以支持最新安全标准。

Python爬虫如何保存数据及方法详解
Python爬虫如何保存数据及方法详解

答案:Python爬虫数据可保存为CSV、JSON、Excel或存入MySQL、MongoDB。小数据用CSV/JSON,分析选Excel,长期结构化存储用MySQL,非结构化数据选MongoDB,注意编码与异常处理。

Python爬虫多站点数据抓取方法
Python爬虫多站点数据抓取方法

使用异步请求、统一解析接口、反爬策略和容错机制可高效抓取多网站数据。1.采用aiohttp+asyncio并发请求,显著提升抓取效率;2.为各站点编写独立解析函数并注册到统一映射表,实现结构化输出;3.设置请求头、频率控制、代理IP和重试机制应对反爬;4.成功数据存入数据库,失败记录日志以便重试,确保程序稳定运行。

Python爬虫入门指南与学习路径
Python爬虫入门指南与学习路径

先掌握Python基础语法,再学习requests库发送请求,用BeautifulSoup解析网页,逐步应对反爬机制并实践小项目。

Python爬虫数据处理全攻略
Python爬虫数据处理全攻略

在Python中处理爬取数据主要使用BeautifulSoup解析HTML、json模块处理JSON和xml.etree.ElementTree解析XML。1)使用BeautifulSoup从HTML中提取标题和段落。2)用json.loads()解析JSON数据。3)用xml.etree.ElementTree从XML中提取信息。数据处理还包括清洗、转换和存储,通常使用pandas库进行操作。

Python爬虫如何合规爬取
Python爬虫如何合规爬取

合规使用Python爬虫需遵循robots协议并依法获取数据。首先通过urllib.robotparser读取robots.txt判断可抓取范围,示例代码显示利用RobotFileParser类检查目标URL权限,并在请求前集成该逻辑。其次控制请求频率,使用time.sleep()加入1-3秒随机延迟或Scrapy的AUTOTHROTTLE扩展减轻服务器压力。同时遵守《网络安全法》《数据安全法》等法规,不采集隐私信息,非授权不得用于商业或传播受版权保护内容。设置规范User-Agent头表明身份,如包含爬

Python爬虫抓取网页内容全攻略
Python爬虫抓取网页内容全攻略

掌握Python爬虫需四步:先用requests发送HTTP请求获取HTML源码,注意添加User-Agent;再用BeautifulSoup或lxml解析HTML提取数据;若页面为JavaScript动态加载,则使用Selenium模拟浏览器;最后将数据保存为CSV或JSON,并通过设置请求间隔、代理IP等应对反爬策略。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
IntelliJ IDEA macOS版
IntelliJ IDEA macOS版
Mac

IntelliJ IDEA 是 JetBrains 推出的专业集成开发环境,重点服务于 Java、Kotlin 与 JVM 项目开发。软件集成代码补全、静态检查、重构、调试、测试、版本控制及构建工具,并可借助插件扩展语言和框架支持。

PyCharm macOS版
PyCharm macOS版
Mac

JetBrains PyCharm 是面向 Python 开发者的集成开发环境,提供智能补全、代码检查、重构、调试、测试、版本控制及虚拟环境管理功能。Mac 版兼容 Intel 与 Apple 芯片,核心功能可免费使用。

WebStorm macOS版
WebStorm macOS版
Mac

JetBrains WebStorm 是面向 JavaScript、TypeScript 和现代 Web 技术的专业集成开发环境,可智能理解项目结构,提供代码补全、重构、错误检查、运行调试、测试及 Git 工具。

WINDOWS 更多
IntelliJ IDEA Windows版
IntelliJ IDEA Windows版
Windows

JetBrains IntelliJ IDEA 是以 Java、Kotlin 和 JVM 项目为核心的专业集成开发环境,提供智能补全、代码检查、安全重构、调试、测试、版本控制及构建工具集成。统一发行版的核心功能可免费用于商业和非商业项目,

PhpStorm Windows版
PhpStorm Windows版
Windows

PhpStorm 是 JetBrains 面向 PHP 与现代 Web 开发打造的专业集成开发环境,提供代码补全、静态检查、重构、调试、测试、数据库、版本控制及前端语言支持。Windows 用户可直接下载安装程序,

PyCharm Windows版
PyCharm Windows版
Windows

PyCharm 是 JetBrains 推出的 Python 集成开发环境,提供智能代码补全、错误检查、重构、调试、测试、Git、终端及 Jupyter Notebook 支持。统一版安装后可体验 30 天 Pro 功能,