Python爬虫案例入门:从零开始编写你的第一个数据采集程序
📚 目录导读
- Python爬虫是什么?为什么初学者要学?
- 环境搭建:你需要准备什么工具?
- 核心原理:网页请求与响应机制
- 抓取静态网页标题(Requests + BeautifulSoup)
- 提取表格数据并保存为CSV
- 处理动态加载内容(Selenium基础)
- 常见错误与调试技巧
- 合规与伦理:爬虫的边界在哪?
- Q&A 问答环节
Python爬虫是什么?为什么初学者要学?
Python爬虫,本质上是模拟浏览器发送HTTP请求,获取服务器返回的HTML、JSON等数据,再通过解析工具提取出有用信息的过程,对于编程新手来说,它有两个核心价值:

- 快速获得成就感:只需几十行代码,就能抓取新闻标题、天气预报、商品价格等真实数据。
- 扎实理解网络通信:你会弄懂URL、HTTP状态码、HTML结构、CSS选择器等基础概念。
你可能会问:“不会JavaScript能写爬虫吗?”
答:完全可以,大部分入门案例基于静态页面,只用到Python基础语法和少量第三方库。
环境搭建:你需要准备什么工具?
在开始写代码前,请确保电脑上已安装以下内容:
| 工具 | 版本建议 | 下载方式 |
|---|---|---|
| Python 3 | 8及以上 | 官网python.org 或 Anaconda |
| pip | Python自带 | 无需额外安装 |
| VS Code (或PyCharm) | 最新版 | 官网下载社区版即可 |
安装所需库(在终端或命令行执行):
pip install requests beautifulsoup4 lxml # 后续案例二需要: pip install pandas # 案例三需要(可选): pip install selenium
检查是否成功: 在Python中执行
import requests不报错即成功。
核心原理:网页请求与响应机制
一次简单的爬虫请求流程:
你的代码 → 模拟浏览器 → 发送GET请求 → 服务器返回HTML → 代码解析HTML → 提取数据
- Requests库:负责“发送请求”和“接收响应”。
- BeautifulSoup库:负责“解析HTML”和“提取数据”。
关键概念:
URL:你访问的网址Response:服务器返回的内容(包含HTML文本、状态码、cookie等)Status Code 200:请求成功Status Code 404:页面不存在Status Code 403:禁止访问(需要伪装头信息)
Q:为什么我的代码能访问,但返回空数据?
A:常见原因包括:①网页内容是通过JavaScript动态加载的(案例三解决);②网站反爬机制(需要添加User-Agent头)。
案例一:抓取静态网页标题
目标: 抓取一个简单新闻网站的标题列表。
步骤:
- 打开目标URL(以example.com为例,实际请替换为合法可爬取的网站)。
- 使用requests获取页面源码。
- 使用BeautifulSoup解析并提取
<h2>标签内的文本。
代码示例(可直接运行):
import requests
from bs4 import BeautifulSoup
url = "https://httpbin.org/anything" # 测试用安全页面
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" # 防止中文乱码
soup = BeautifulSoup(response.text, "lxml")
# 假设页面中有h2标签,实际测试请换为真实页面
example_data = soup.find("body").get_text()[:200]
print("返回内容前200字符:", example_data)
解析说明:
headers:伪装成浏览器,避免被识别为爬虫。soup.find("h2"):找到第一个匹配标签;soup.find_all("h2"):找到所有。
Q:如果找不到标签怎么办?
A:先打印response.text前500字符,确认页面源代码是否有目标标签。
案例二:提取表格数据并保存为CSV
目标: 从HTML表格中提取数据,保存为excel可打开的CSV文件。
适用场景: 天气报告、股票列表、排行榜等结构化表格数据。
代码示例:
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = "https://httpbin.org/html" # 测试页面,无实用表格
response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml")
# 定位表格(假设id为"data-table")
table = soup.find("table", id="data-table")
if table:
rows = table.find_all("tr")
data = []
for row in rows:
cells = row.find_all("td")
if cells:
data.append([cell.get_text(strip=True) for cell in cells])
df = pd.DataFrame(data)
df.to_csv("output.csv", index=False, encoding="utf-8-sig")
print("数据已保存至 output.csv")
else:
print("未找到表格,请检查页面结构")
关键技巧:
utf-8-sig:防止CSV用Excel打开时中文乱码。- 先用浏览器开发者工具(F12)查看表格的结构和class/id属性。
案例三:处理动态加载内容(Selenium基础)
痛点: 有些网站的内容在滚动页面或点击按钮后才出现(如评论区、无限滚动列表),此时静态请求拿不到数据。
解决方案: 使用Selenium模拟真实浏览器操作。
安装与简单用法:
pip install selenium # 还需要下载对应浏览器的驱动,如ChromeDriver
示例代码(打开百度并搜索):
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome() # 确保chromedriver在PATH中
driver.get("https://www.example.com")
time.sleep(2) # 等待加载
# 搜索框输入关键词
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Python爬虫")
search_box.send_keys(Keys.RETURN)
time.sleep(3)
print("当前页面标题:", driver.title)
driver.quit()
Q:Selenium一定比requests慢吗?
A:是的,因为它要启动真实浏览器,优先用requests(静态页面),动态页面再考虑Selenium。
常见错误与调试技巧
| 错误现象 | 可能原因 | 解决方法 |
|---|---|---|
ConnectionError |
网络中断或网址错误 | 检查URL、重试或使用代理 |
HTTP 403 |
被反爬识别 | 添加headers和延时time.sleep(1) |
| 中文乱码 | 编码不对 | 强制设置response.encoding = "utf-8" |
AttributeError: 'NoneType' |
标签未找到 | 先用soup.prettify()查看实际结构 |
调试三件套:
print(response.status_code) # 检查状态码 print(response.text[:500]) # 查看页面源码前500字符 soup = BeautifulSoup(response.text, "lxml") print(soup.prettify()[:1000]) # 格式化输出
合规与伦理:爬虫的边界在哪?
初学者最容易忽略的是法律风险,请务必遵守:
- ✅ robots.txt:访问
目标网址/robots.txt查看允许爬取的范围。 - ✅ 频率控制:每次请求间隔至少1秒,避免对服务器造成压力。
- ✅ 公开数据:仅爬取公开可访问的内容,不要突破登录验证。
- ❌ 不要:抓取个人隐私、付费内容、并用于商业盈利。
Q:爬虫会被抓吗?
A:如果你遵守规则,爬取公开可访问的非敏感数据,且不攻击服务器,通常没有问题,但若大规模并发抓取或伪造数据,可能面临法律风险。
Q&A 问答环节
Q1:没有编程基础能学爬虫吗?
A:可以,但建议先了解Python基础(变量、循环、列表、字典、函数)大约2周即可上手。
Q2:遇到反爬虫(如验证码)怎么办?
A:新手建议换个网站练习,进阶可了解IP代理池、Cookie模拟登录,但并非入门内容。
Q3:抓下来的数据如何存储?
A:常用方式:CSV(通用)、JSON(结构灵活)、SQLite(小型数据库)、Excel。
Q4:推荐学习资源有哪些?
A:官方文档(Requests、BeautifulSoup、Selenium)是最权威的,其次可看GitHub上的实战项目。
Q5:用别人的API不好吗?为什么要写爬虫?
A:API有访问限制、需要密钥、或根本不存在公开API,爬虫可以获取定制化的数据。
Python爬虫入门并不难,核心在于理解“请求→解析→存储”三步骤,从今天起,打开你的IDE,跟着案例一行行敲代码,很快你就能拥有属于自己的数据采集工具。实践是最好的老师,但合规是底线,现在就开始你的第一个爬虫项目吧!