Python爬虫零基础实战:3步抓取网页数据并导出Excel

文章目录

引言:为什么爬虫是Python入门的最佳实战项目?

在掌握了Python基础语法后,很多初学者会陷入"学完就忘"的困境。而网络爬虫作为Python最经典的应用场景之一,不仅能让你快速看到代码的实际效果,还能串联起文件操作、字符串处理、第三方库调用等多个核心知识点。本文将带你从零开始,用3个步骤完成一个完整的网页数据抓取项目,并将结果导出为Excel文件,真正实现学以致用。


第一步:环境准备与核心库安装

在开始写代码之前,我们需要准备好爬虫所需的"工具箱"。

  1. 请确保你已经 按上一篇文章完成了Python环境搭建
  2. 然后在终端执行以下命令安装必要的第三方库:
bash 复制代码
pip install requests beautifulsoup4 openpyxl
  • requests:用于发送HTTP请求,获取网页HTML内容,比Python内置的urllib更简洁易用。
  • beautifulsoup4:用于解析HTML文档,精准提取我们需要的数据标签。
  • openpyxl:用于将抓取到的数据写入Excel文件,无需手动拼接CSV格式。

⚠️ 重要提醒:爬虫仅可用于学习研究或获取公开合法数据,请勿抓取受版权保护的内容、个人隐私信息或对目标网站造成服务器压力。遵守robots.txt协议是每位开发者的基本素养。


第二步:3步实现网页数据抓取与解析

我们以一个公开的图书列表页面为例,演示如何抓取书名、价格和评分信息。

1. 发送请求获取网页内容

首先,使用requests库向目标URL发送GET请求,并设置User-Agent模拟浏览器访问,避免被简单拦截:

python 复制代码
import requests

url = "https://books.toscrape.com/"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
response = requests.get(url, headers=headers)
response.encoding = "utf-8"  # 防止中文乱码
html_content = response.text

2. 解析HTML提取目标数据

使用BeautifulSoup将HTML文本转化为可搜索的对象,通过CSS选择器定位到每一本书的容器,再分别提取书名、价格和评分:

python 复制代码
from bs4 import BeautifulSoup

soup = BeautifulSoup(html_content, "html.parser")
book_list = []

# 每本书都在 class="product_pod" 的article标签中
for book in soup.select("article.product_pod"):
    title = book.select_one("h3 > a")["title"]
    price = book.select_one(".price_color").text
    rating = book.select_one("p.star-rating")["class"][1]  # 评级存储在class中
    book_list.append({
        "书名": title,
        "价格": price,
        "评分": rating
    })

print(f"成功抓取 {len(book_list)} 条图书数据")

3. 处理分页(可选进阶)

如果目标网站有多个页面,可以通过观察URL规律拼接下一页链接,或使用BeautifulSoup提取"Next"按钮的href属性,循环执行上述抓取逻辑即可。


第三步:将数据导出为Excel文件

抓取到的数据最终需要落地保存。使用openpyxl可以将列表中的字典数据一键写入Excel,并自动添加表头:

python 复制代码
from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = "图书数据"

# 写入表头
headers = ["书名", "价格", "评分"]
ws.append(headers)

# 写入数据行
for row in book_list:
    ws.append([row["书名"], row["价格"], row["评分"]])

# 调整列宽,提升可读性
for col in ws.columns:
    max_length = max(len(str(cell.value or "")) for cell in col)
    ws.column_dimensions[col[0].column_letter].width = min(max_length + 2, 50)

wb.save("books_data.xlsx")
print("数据已成功导出至 books_data.xlsx")

新手必看的反爬避坑与合规指南

在实际项目中,你可能会遇到各种反爬机制。以下是几个关键的应对原则:

  • 控制请求频率:每次请求之间添加 time.sleep(1~3) 随机延迟,避免高频访问触发封禁。
  • 尊重robots.txt:在抓取前访问 目标域名/robots.txt,确认哪些路径允许被抓取。
  • 不存储敏感信息:即使技术上可以获取,也不要保存用户密码、手机号等隐私数据。
  • 优先使用官方API:如果目标网站提供了开放API,永远优先使用API而非爬虫,这是最稳定合规的方式。

总结:从爬虫出发,走向更广阔的Python世界

通过这个3步实战项目,你不仅掌握了Python爬虫的核心流程,还学会了如何将数据落地为可用的Excel文件。这只是一个起点------接下来你可以尝试抓取动态渲染页面(Selenium/Playwright)、对接数据库存储、或将数据接入可视化大屏。

记住,编程能力的提升永远来自于"动手解决真实问题",现在就去选择一个你感兴趣的公开网站,写下你的第一个爬虫吧!

相关推荐
平生幻1 小时前
unbuntu虚拟机确认python安装位置
开发语言·python
copilot中国版1 小时前
Copilot + Rules:让Excel自动完成数据清洗,5分钟变标准数据
excel·copilot
jason.zeng@15022071 小时前
(七)「固化 Rest 接口 + Text-to-SQL 灵活查询」双模式 Agent 架构教程
数据库·python·sql·ai·架构·langchain·ai编程
YEGE学AI算法1 小时前
KWS语音唤醒系统完整链路:音频前处理、Fbank、阈值与冷却逻辑
python·音视频·语音唤醒·kws·fbank
kida_yuan1 小时前
不想花钱写了一个 Flask 知识库(续)
python
云樱梦海1 小时前
5 分钟上手 IndexTTS 2.5 便携包:不用装 Python、不挑显卡、本地离线跑语音克隆
开发语言·python·tts·indextts2.5
Java小白笔记1 小时前
Java 函数式接口1:从无参任务到自定义多参数查询
java·windows·python
IT_Octopus1 小时前
【零基础入门 LLM 开发 · Day 10】:LangChain 入门——一条管道符串起 prompt 和模型
python·langchain·prompt
zaemyn20202 小时前
macOS 上 AccessClient 无法唤起?排查 Python 架构与 Windows App 识别问题
windows·python·macos·远程桌面·accessclient