文章目录
-
- 引言:为什么爬虫是Python入门的最佳实战项目?
- 第一步:环境准备与核心库安装
- 第二步:3步实现网页数据抓取与解析
-
- [1. 发送请求获取网页内容](#1. 发送请求获取网页内容)
- [2. 解析HTML提取目标数据](#2. 解析HTML提取目标数据)
- [3. 处理分页(可选进阶)](#3. 处理分页(可选进阶))
- 第三步:将数据导出为Excel文件
- 新手必看的反爬避坑与合规指南
- 总结:从爬虫出发,走向更广阔的Python世界
引言:为什么爬虫是Python入门的最佳实战项目?
在掌握了Python基础语法后,很多初学者会陷入"学完就忘"的困境。而网络爬虫作为Python最经典的应用场景之一,不仅能让你快速看到代码的实际效果,还能串联起文件操作、字符串处理、第三方库调用等多个核心知识点。本文将带你从零开始,用3个步骤完成一个完整的网页数据抓取项目,并将结果导出为Excel文件,真正实现学以致用。
第一步:环境准备与核心库安装
在开始写代码之前,我们需要准备好爬虫所需的"工具箱"。
- 请确保你已经 按上一篇文章完成了Python环境搭建
- 然后在终端执行以下命令安装必要的第三方库:
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)、对接数据库存储、或将数据接入可视化大屏。
记住,编程能力的提升永远来自于"动手解决真实问题",现在就去选择一个你感兴趣的公开网站,写下你的第一个爬虫吧!