Python爬虫入门:从环境搭建到第一个爬虫程序

唐可
唐可
发布时间:2026-11-07| 4人浏览过
原创

面向初学者的实用Python爬虫入门教程,涵盖Python与依赖库环境配置、HTTP请求与HTML解析核心原理,以及编写和运行第一个网页抓取程序的完整步骤与注意事项。

编写网页爬虫的核心任务只有三步:向目标网页发送网络请求获取源码、从网页代码中提取出所需文本、将提取结果保存或输出。本文将按实际操作流程,介绍基础运行环境的安装与验证、数据抓取与解析的基本原理,并带你编写一个抓取静态书籍列表的完整Python爬虫程序。

一、认识网页爬虫的工作机制

网络爬虫(Web Scraper)是一种按照指定规则自动抓取网络信息的程序。浏览器展示网页时,会先向网站服务器发出HTTP请求,服务器返回HTML代码及相关资源,浏览器再将这些内容渲染成我们看到的界面。

Python爬虫在本质上是模拟浏览器的请求过程。爬虫程序向服务器索要HTML文本,但它不需要像浏览器那样排版样式或执行复杂动画,而是直接用代码在HTML结构中检索特定的标签与属性,把目标数据抽取出来。

Python爬虫入门:从环境搭建到第一个爬虫程序
图1:网络爬虫的基本数据流向与处理架构

二、搭建爬虫开发环境

在编写程序前,需要准备好Python解释器以及两个常用的第三方库:requests(负责网络通信)和beautifulsoup4(负责解析HTML文档)。

1. 确认与安装Python

打开系统终端(Windows使用命令提示符 CMD 或 PowerShell,macOS与Linux使用 Terminal),输入以下命令检查是否已安装Python:

python --version

在部分系统上,可能需要输入:

python3 --version

如果终端输出了类似 Python 3.10.x 或更高版本的版本号,说明环境已就绪。如果提示找不到命令,需前往 Python 官方网站(python.org)下载并安装最新的稳定版。安装时请勾选 "Add Python to PATH",确保命令行能够直接调用。

2. 安装爬虫必需的第三方库

Python自带的包管理工具是 pip。在终端中执行以下命令,一次性安装本教程所需的依赖包:

pip install requests beautifulsoup4

若网络连接较慢,可以使用国内镜像源进行加速,例如清华大学开源软件镜像站:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests beautifulsoup4

3. 验证环境是否可用

安装完成后,在终端直接输入 python 进入交互模式,执行导入语句进行验证:

import requests
from bs4 import BeautifulSoup
print("Environment Ready!")

如果没有抛出 ModuleNotFoundError 且屏幕打印出 Environment Ready!,表明库文件安装成功。输入 exit() 退出交互模式。

Python爬虫入门:从环境搭建到第一个爬虫程序
图2:环境搭建与前置检查步骤

三、分析目标网页结构

编写爬虫前,必须先了解目标网页的HTML组织形式。我们选用专门用于爬虫练习的公开测试站点:http://books.toscrape.com/。该站点结构规则且不设访问限制,非常适合新手验证思路。

在浏览器中打开该网址,按键盘 F12 打开“开发者工具”(DevTools),切换到 Elements(元素)面板。利用左上角的检查箭头点击页面中的一本书籍,观察对应的HTML结构。

可以看到,每本书都被包裹在一个独立的 <article class="product_pod"> 标签内,其内部包含书名和价格信息:

  • 书名:位于 <h3> > <a> 标签的 title 属性中。
  • 价格:位于 <p class="price_color"> 标签的文本内容中。
Python爬虫入门:从环境搭建到第一个爬虫程序
图3:目标页面HTML DOM节点提取映射图

四、编写第一个爬虫程序

新建一个名为 my_first_scraper.py 的文件,将下面的代码完整复制进去。程序包含请求发送、内容解析与提取三个核心部分。

import requests
from bs4 import BeautifulSoup

# 1. 目标网址与请求头配置
url = "http://books.toscrape.com/"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

# 2. 发起网络请求
try:
    response = requests.get(url, headers=headers, timeout=10)
    # 检查HTTP响应状态码,非200将抛出异常
    response.raise_for_status()
    # 强制将网页编码设定为UTF-8,防止中文或特殊字符乱码
    response.encoding = response.apparent_encoding
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")
    exit()

# 3. 解析HTML文本
soup = BeautifulSoup(response.text, "html.parser")

# 4. 定位所有书籍的容器元素
book_nodes = soup.find_all("article", class_="product_pod")

print(f"成功找到 {len(book_nodes)} 本书籍,提取结果如下:\n")

# 5. 遍历每个容器并提取目标数据
for index, book in enumerate(book_nodes, start=1):
    # 提取书名:在当前节点内部寻找 

下的 标签 title_tag = book.find("h3").find("a") title = title_tag.get("title") # 读取 title 属性 # 提取价格:在当前节点内部寻找 class 为 price_color 的

标签 price_tag = book.find("p", class_="price_color") price = price_tag.text.strip() # 读取标签中的纯文本并去除首尾空格 print(f"{index}. 书名: 《{title}》 | 价格: {price}")

代码执行与输出验证

在保存该文件的目录下打开终端,执行以下命令运行脚本:

python my_first_scraper.py

程序正常运行后,终端将输出前20本书的提取结果,如下所示(示例):

成功找到 20 本书籍,提取结果如下:

1. 书名: 《A Light in the Attic》 | 价格: £51.77
2. 书名: 《Tipping the Velvet》 | 价格: £53.74
3. 书名: 《Soumission》 | 价格: £50.10
...
20. 书名: 《Mesaerion: The Best Science Fiction Stories 1800-1849》 | 价格: £37.59

五、核心代码的关键环节拆解

上面的代码包含了初学者必须掌握的几个标准动作:

  1. 添加 User-Agent 请求头:许多服务器会直接拒绝没有附带标识的请求(默认的 python-requests/x.x 请求头极易被系统判定为自动化脚本)。在请求参数中加入 headers 模拟常规浏览器的身份,是保证请求顺畅的基础规范。
  2. 设置请求超时(timeout):requests.get(url, timeout=10) 规定了网络等待的最长时间为10秒。若服务器无响应,程序会自动中断并抛出异常,防止代码无限期卡住。
  3. 选择器精准定位:soup.find_all("article", class_="product_pod") 会返回包含所有匹配节点的列表。注意在BeautifulSoup中,由于 class 是Python的保留关键字,查找类名时必须书写为 class_="类名"。
  4. 属性与文本的区别获取:获取HTML标签内部展示的文字使用 .text 或 .get_text();获取标签属性(如 href、src、title)则使用类似字典的语法 tag.get("属性名")。

六、初学爬虫的常见报错与排查清单

编写基础爬虫时,大多数报错集中在网络连接与节点提取阶段。下表列出了最常见的问题及解决方法:

  • AttributeError: 'NoneType' object has no attribute 'find'(或 'text'):
    原因:find() 没有找到匹配的标签,返回了 None,后续继续对它调用属性时程序崩溃。
    解决办法:检查HTML标签名与类名是否与网页实际源码完全一致,或先通过 if tag is not None: 进行判空再读取属性。
  • 中文或字符显示乱码(如出现 Â 等异常字符):
    原因:requests 自动推测的编码与网页实际编码不符。
    解决办法:在解析文本前,手动指定 response.encoding = response.apparent_encoding 或直接指定为 response.encoding = 'utf-8'。
  • ConnectionError 或 ReadTimeout:
    原因:网络不可达、DNS解析失败或目标网站访问受限。
    解决办法:先在浏览器中手动访问该URL确认连通性,或适度调大 timeout 参数。
注意事项与爬虫规范: 写爬虫时切忌在没有延时的情况下对目标网站发起高频并发请求。未经控制的高频请求会占用目标服务器资源,容易触发IP封禁,甚至影响站点正常运营。正式项目中应使用 time.sleep() 加入适当间隔,并严格遵守网站的 robots.txt 协议规范。

七、知识全景与后续进阶路径

至此,你已经完成了环境配置、页面分析以及静态页面抓取与解析的全过程。静态HTML页面的抓取是所有网络爬虫的起点。为了帮助你理清后续的学习脉络,图4对本次涉及的核心节点及后续进阶技能进行了整体梳理。

Python爬虫入门:从环境搭建到第一个爬虫程序
图4:Python爬虫技术体系与学习路径总结

当遇到通过JavaScript动态加载内容的现代网页时,纯粹依靠 requests 可能无法直接获取页面数据,届时可以借助浏览器的“网络”(Network)面板抓取其背后的API数据接口,或引入自动化工具(如Playwright)。但无论技术如何扩展,发送请求、定位目标与提取字段的核心思路始终不变。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。