1. 项目概述:从零开始的爬虫入门
最近在技术社区看到不少朋友对网络爬虫感兴趣,但苦于找不到合适的新手教程。作为从零开始自学爬虫的过来人,我决定写一个真正面向纯小白的实战指南。这个"码上爬第二题"项目,就是专门为没有任何编程基础的朋友设计的入门级爬虫练习。
你可能听说过爬虫能自动抓取网页数据,但具体怎么实现却毫无头绪。别担心,我会用最直白的语言,带你一步步完成第一个能实际运行的爬虫程序。我们不会涉及复杂的反爬机制,也不讨论高深的算法,就是让你体验"原来爬虫这么简单"的成就感。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备:搭建你的第一个爬虫工作台
2.1 Python安装与环境配置
爬虫最常用的语言是Python,因为它有丰富的库支持。即使你从未写过代码,按照以下步骤也能轻松完成安装:
- 访问Python官网下载最新稳定版(目前是3.11.x)
- 安装时务必勾选"Add Python to PATH"选项
- 安装完成后,在命令提示符输入
python --version验证
注意:很多新手卡在第一步就是因为没勾选PATH选项,导致系统找不到python命令。如果遇到"python不是内部命令"的错误,卸载重装时记得勾选这个选项。
2.2 开发工具选择
推荐使用VS Code作为编辑器:
- 免费且轻量级
- 内置终端可以直接运行代码
- 有丰富的Python插件支持
安装完成后,记得安装Python扩展插件。这样就能在编辑器里直接运行和调试代码了。
2.3 必备库安装
在终端执行以下命令安装爬虫基础库:
bash复制pip install requests beautifulsoup4
- requests:用于发送HTTP请求获取网页内容
- beautifulsoup4:用于解析HTML文档
3. 第一个爬虫:抓取网页标题
3.1 理解网页结构基础
在开始写代码前,我们需要简单了解网页是如何构成的。用浏览器打开任意网页,右键选择"查看页面源代码",你会看到类似这样的结构:
html复制<html>
<head>
<title>这是网页标题</title>
</head>
<body>
<div class="content">...</div>
</body>
</html>
我们的目标是提取<title>标签内的文字内容。
3.2 编写基础爬虫代码
新建一个spider.py文件,输入以下代码:
python复制import requests
from bs4 import BeautifulSoup
# 目标网页URL
url = "https://example.com"
# 发送HTTP请求
response = requests.get(url)
# 解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')
# 提取标题
title = soup.title.string
print("网页标题是:", title)
这段代码做了以下几件事:
- 导入需要的库
- 指定要抓取的网址
- 发送GET请求获取网页内容
- 用BeautifulSoup解析HTML
- 找到title标签并打印其内容
3.3 运行你的第一个爬虫
在终端执行:
bash复制python spider.py
如果一切正常,你会看到输出类似:
code复制网页标题是: Example Domain
恭喜!你已经成功完成了第一个网络爬虫。
4. 进阶练习:抓取更多内容
4.1 定位特定元素
现在我们来尝试抓取更多内容。以豆瓣电影Top250为例,我们想抓取每部电影的标题和评分。
首先用浏览器打开豆瓣Top250,右键"检查"元素,找到电影标题对应的HTML结构。你会发现每个电影项都有这样的结构:
html复制<div class="item">
<span class="title">肖申克的救赎</span>
<span class="rating_num">9.7</span>
</div>
4.2 修改爬虫代码
更新spider.py为以下内容:
python复制import requests
from bs4 import BeautifulSoup
url = "https://movie.douban.com/top250"
headers = {
'User-Agent': 'Mozilla/5.0'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
movies = soup.find_all('div', class_='item')
for movie in movies:
title = movie.find('span', class_='title').text
rating = movie.find('span', class_='rating_num').text
print(f"电影: {title}, 评分: {rating}")
这里新增了几个重要知识点:
- 添加了headers模拟浏览器访问
- 使用find_all查找所有电影项
- 在每个电影项中进一步查找标题和评分
4.3 处理常见问题
运行这段代码可能会遇到两个常见问题:
- 403禁止访问:这是因为豆瓣识别出了爬虫。解决方法是在headers中添加更多浏览器信息:
python复制headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
- 标签不存在报错:有些电影可能有不同的HTML结构。更健壮的写法是:
python复制title_tag = movie.find('span', class_='title')
title = title_tag.text if title_tag else "无标题"
5. 数据存储与分析
5.1 将结果保存到文件
爬取的数据如果只是打印在控制台就太可惜了。我们来学习如何保存到CSV文件:
python复制import csv
with open('movies.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['电影名称', '评分'])
for movie in movies:
title = movie.find('span', class_='title').text
rating = movie.find('span', class_='rating_num').text
writer.writerow([title, rating])
运行后会在同目录下生成movies.csv文件,可以用Excel打开查看。
5.2 简单数据分析
安装pandas库进行数据分析:
bash复制pip install pandas
然后创建一个分析脚本:
python复制import pandas as pd
df = pd.read_csv('movies.csv')
print("平均评分:", df['评分'].mean())
print("最高分电影:", df.loc[df['评分'].idxmax()])
6. 爬虫伦理与最佳实践
6.1 遵守robots.txt
每个网站根目录下都有robots.txt文件,规定了哪些页面允许爬取。例如访问https://www.douban.com/robots.txt可以看到豆瓣的爬虫规则。
6.2 设置合理的请求间隔
快速连续请求会给服务器造成压力。建议在每个请求间添加延时:
python复制import time
time.sleep(1) # 暂停1秒
6.3 处理异常情况
健壮的爬虫应该能处理各种异常:
python复制try:
response = requests.get(url, headers=headers, timeout=5)
response.raise_for_status() # 检查HTTP错误
except requests.exceptions.RequestException as e:
print("请求出错:", e)
7. 项目扩展思路
掌握了基础爬虫后,你可以尝试以下扩展:
- 分页抓取:修改URL参数抓取全部250部电影
- 更多数据:抓取导演、主演、评价人数等信息
- 可视化:用matplotlib绘制评分分布图
- 定时任务:每天自动抓取最新数据
我在实际项目中发现,新手最容易犯的错误是试图一次抓取太多数据。建议从小规模开始,确保代码稳定后再扩展。比如先确保能正确抓取第一页的25部电影,再考虑分页逻辑。
另一个实用技巧是使用session保持会话,特别是需要登录的网站:
python复制session = requests.Session()
session.headers.update(headers)
response = session.get(url)
最后提醒一点:爬虫虽然强大,但一定要在法律和道德允许的范围内使用。只抓取公开可用数据,不要对目标网站造成过大负担。
