1. 转行Python的第三天:从环境搭建到第一个爬虫项目
三天前刚把工位上的Java咖啡杯换成Python蟒蛇logo时,我连pip install都会报错。现在坐在显示器前,看着自己刚写完的天气爬虫脚本稳定运行,突然觉得这段转行经历值得记录下来。如果你也正在从其他语言转向Python,或是刚接触编程不久,这篇实战笔记或许能帮你少走些弯路。
2. 开发环境配置踩坑实录
2.1 Python版本选择困境
在第一天安装Python时就遇到了版本选择的经典问题。官方提供了3.11和3.12两个版本,而很多教程还在用3.7。经过实际测试发现:
- 3.12虽然性能提升5-8%,但部分第三方库兼容性不佳
- 3.11有最完善的库支持,且性能已足够
- 3.7以下版本已逐步被主流库放弃支持
最终选择3.11.4作为开发版本,这是目前最稳定的选择。安装时务必记得勾选"Add Python to PATH",否则后续命令行操作会非常麻烦。
2.2 虚拟环境搭建
直接系统全局安装包会导致依赖混乱,这里强烈推荐使用venv:
bash复制python -m venv myenv
source myenv/bin/activate # Linux/Mac
myenv\Scripts\activate.bat # Windows
常见问题:
- 权限不足时添加--without-pip参数
- VSCode中需要手动选择解释器路径
- 退出虚拟环境用deactivate命令
3. 基础语法速成要点
3.1 与其他语言的核心差异
作为有Java背景的转行者,这些Python特性最让我惊讶:
- 缩进代替大括号(刚开始经常报IndentationError)
- 动态类型(写惯了强类型一时难以适应)
- 列表推导式(真香!)
- 没有switch-case(用字典代替)
3.2 必须掌握的五个语法糖
- 多重赋值:
a, b = b, a - 海象运算符(Python 3.8+):
if (n := len(data)) > 10: - f-string格式化:
f"用户{name}今年{age}岁" - 解包操作:
first, *rest = [1,2,3,4] - 字典合并(Python 3.9+):
dict1 | dict2
4. 第一个实战项目:天气爬虫
4.1 技术选型思路
选择天气爬虫作为第一个项目是因为:
- 涉及HTTP请求、HTML解析等核心技能
- 数据结构化程度高
- 结果可视化直观
- 不会触发反爬机制(适合练习)
工具链选择:
- requests比urllib更人性化
- BeautifulSoup比lxml更易上手
- pandas用于数据清洗
- matplotlib做简单可视化
4.2 完整实现代码
python复制import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
def get_weather(city):
url = f"https://www.weather.com/weather/today/l/{city}"
headers = {'User-Agent': 'Mozilla/5.0'}
try:
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 提取关键数据
temp = soup.find('span', {'data-testid': 'TemperatureValue'}).text
condition = soup.find('div', {'data-testid': 'wxPhrase'}).text
humidity = soup.find('span', {'data-testid': 'HumidityValue'}).text
return {
'城市': city,
'温度': temp,
'天气状况': condition,
'湿度': humidity
}
except Exception as e:
print(f"获取{city}天气失败: {e}")
return None
# 示例使用
cities = ['Beijing', 'Shanghai', 'Guangzhou']
weather_data = [get_weather(city) for city in cities if get_weather(city)]
# 转为DataFrame并保存
df = pd.DataFrame(weather_data)
df.to_csv('weather_report.csv', index=False)
# 简单可视化
df['温度'] = df['温度'].str.extract('(\d+)').astype(int)
df.plot(x='城市', y='温度', kind='bar')
plt.title('主要城市温度对比')
plt.savefig('weather.png')
5. 常见错误与解决方案
5.1 编码问题
中文字符处理建议:
- 文件开头添加
# -*- coding: utf-8 -*- - 请求时指定
response.encoding = 'utf-8' - 保存csv使用
encoding='utf_8_sig'
5.2 反爬应对
虽然天气网站较友好,但好习惯要早养成:
- 添加合理的User-Agent
- 控制请求频率(time.sleep随机延时)
- 使用代理IP池(后续进阶)
- 检查robots.txt协议
5.3 其他典型报错
-
ModuleNotFoundError:
- 检查虚拟环境是否激活
- 确认包名是否正确(大小写敏感)
-
SSL证书错误:
python复制import ssl ssl._create_default_https_context = ssl._create_unverified_context仅限开发环境使用
-
版本冲突:
使用pip freeze > requirements.txt保存依赖
6. 学习资源与进阶路线
6.1 三日学习成果
- [x] 环境配置与基础语法
- [x] 常用数据结构操作
- [x] 文件读写与异常处理
- [x] 第三方库使用
- [x] 简单爬虫项目
6.2 推荐学习路径
- 巩固基础:《Python Crash Course》
- 爬虫进阶:《Python网络数据采集》
- 数据分析:《利用Python进行数据分析》
- 项目实战:Flask/Django开发
6.3 效率工具推荐
- Jupyter Notebook:交互式学习
- Postman:API调试
- Git:版本控制
- PyCharm/VSCode:IDE选择
三天时间从零开始到能完成简单爬虫,Python的学习曲线确实比想象中平缓。最大的体会是:不要陷入无止境的理论学习,快速动手做项目才是最高效的方式。接下来我计划用两周时间掌握Django开发,到时候再来分享新的转行心得。