零基础必学!Python爬虫实战:爬取天气预报,自动保存近7天天气+温度+风力

📅 发布时间:2026/7/7 0:00:09 👁️ 浏览次数:
零基础必学!Python爬虫实战:爬取天气预报,自动保存近7天天气+温度+风力
最近公司行政部的小周找我吐槽“每天早上要打开3个天气网站抄全公司3个办公区的近7天天气、温度、风力月底还要整理成Excel眼睛都花了”我笑着说“这事儿交给Python啊1小时写个脚本一键搞定以后每天点一下就行。”今天就把这个保姆级的实战教程分享给零基础的你——不用懂复杂的算法不用写几百行代码跟着步骤走你也能做出自己的第一个实用爬虫一、准备工作先把家伙事儿备齐零基础也能10分钟搞定1. 安装Python这是第一步也是最容易卡的一步别慌跟着做打开Python官网https://www.python.org/downloads/点击黄色的“Download Python 3.x.x”按钮3.x.x是最新稳定版比如3.13.2直接下就行关键关键关键安装时一定要勾选最下面的“Add Python 3.x.x to PATH”不然后面用不了pip命令点击“Install Now”等待安装完成出现“Setup was successful”就可以了。2. 安装VS Code免费好用的编辑器打开VS Code官网https://code.visualstudio.com/点击蓝色的“Download for Windows”Mac/Linux选对应的一路“Next”安装安装完成后打开VS Code。点击左侧的“扩展”图标四个小方块搜索“Python”安装微软官方的第一个插件图标是蓝色的Python。3. 安装必要的Python库用国内镜像源下载速度快10倍打开VS Code的“终端”快捷键Ctrl ~或者点击顶部菜单“终端”→“新建终端”依次输入下面的命令每输完一行按回车# 1. 安装requests库用来向天气网站发送请求获取网页内容pipinstallrequests -i https://pypi.tuna.tsinghua.edu.cn/simple# 2. 安装BeautifulSoup4库用来解析网页内容提取我们需要的天气数据pipinstallbeautifulsoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple# 3. 安装pandas库用来整理数据生成Excel表格pipinstallpandas -i https://pypi.tuna.tsinghua.edu.cn/simple# 4. 安装openpyxl库pandas生成Excel需要用到它pipinstallopenpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple如果终端显示“Successfully installed xxx”就说明安装成功了二、选一个好爬的天气网站避开反爬太严的新手别碰百度、墨迹天气这种反爬很严的网站我推荐用天气后报http://www.weather.com.cn/优点反爬几乎没有网页结构简单数据清晰不用登录就能看。缺点界面有点旧但对我们爬虫来说旧才好三、分析网页结构这是爬虫的核心很简单1. 找到你要爬的城市的天气页面比如我要爬北京的近7天天气打开天气后报搜索“北京”进入北京的天气页面复制浏览器地址栏的URLhttp://www.weather.com.cn/weather/101010100.shtml注意每个城市都有一个唯一的ID北京是101010100上海是101020100你可以自己搜索城市复制URL里的ID。2. 用浏览器的“开发者工具”分析网页这是新手必须学会的技能很简单在天气页面空白处右键点击选择“检查”或者按快捷键F12。点击开发者工具左上角的“小箭头”图标或者按快捷键Ctrl Shift C。用小箭头点击网页上的近7天的日期比如“今天 02月25日”开发者工具会自动定位到对应的HTML代码。继续用小箭头点击天气状况比如“晴”、温度比如“-2℃/10℃”、风力比如“东北风3-4级”你会发现近7天的所有天气数据都在一个ul classt clearfix标签里每一天的天气数据都在这个ul标签下的一个li标签里日期在h1标签里天气状况在p classwea标签里温度在p classtem标签里风力在p classwin标签里。完美结构非常清晰我们可以用BeautifulSoup4轻松提取这些数据四、写代码完整可运行附详细注释在VS Code里新建一个Python文件命名为weather_spider.py把下面的代码复制进去我加了超级详细的注释零基础也能看懂# 1. 导入我们需要的库importrequestsfrombs4importBeautifulSoupimportpandasaspdfromdatetimeimportdatetimedefget_weather(city_id,city_name): 爬取指定城市的近7天天气数据 :param city_id: 城市的唯一ID从天气后报URL里复制 :param city_name: 城市名称用来生成Excel文件名 # 2. 构造天气页面的URLurlfhttp://www.weather.com.cn/weather/{city_id}.shtml# 3. 设置请求头伪装成浏览器避免被反爬# 新手可以直接复制这个请求头不用改headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36}try:# 4. 向天气网站发送GET请求获取网页内容responserequests.get(url,headersheaders,timeout10)# 设置网页编码为UTF-8避免中文乱码response.encodingutf-8# 5. 检查请求是否成功状态码200表示成功ifresponse.status_code!200:print(f请求失败状态码{response.status_code})returnNone# 6. 用BeautifulSoup4解析网页内容soupBeautifulSoup(response.text,html.parser)# 7. 找到包含近7天天气数据的ul标签weather_listsoup.find(ul,class_t clearfix)ifnotweather_list:print(未找到天气数据)returnNone# 8. 遍历ul标签下的所有li标签每一天的天气weather_data[]forliinweather_list.find_all(li):# 提取日期date_tagli.find(h1)datedate_tag.text.strip()ifdate_tagelse未知日期# 提取天气状况wea_tagli.find(p,class_wea)weatherwea_tag.text.strip()ifwea_tagelse未知天气# 提取温度tem_tagli.find(p,class_tem)iftem_tag:# 温度标签里可能有最高温span和最低温ihigh_temptem_tag.find(span).text.strip()iftem_tag.find(span)else未知low_temptem_tag.find(i).text.strip()iftem_tag.find(i)else未知temperaturef{low_temp}/{high_temp}else:temperature未知温度# 提取风力win_tagli.find(p,class_win)ifwin_tag:# 风力标签里有风向i和风力等级spanwind_dirwin_tag.find(i).text.strip()ifwin_tag.find(i)else未知wind_levelwin_tag.find(span).text.strip()ifwin_tag.find(span)else未知windf{wind_dir}{wind_level}else:wind未知风力# 把提取到的数据添加到列表里weather_data.append({日期:date,天气状况:weather,温度:temperature,风力:wind})# 9. 用pandas把列表转换成DataFrame方便生成Exceldfpd.DataFrame(weather_data)# 10. 生成Excel文件名包含城市名和当前日期避免覆盖current_datedatetime.now().strftime(%Y%m%d)excel_filenamef{city_name}_近7天天气_{current_date}.xlsx# 11. 把DataFrame保存到Excel文件里df.to_excel(excel_filename,indexFalse,engineopenpyxl)print(f✅ 爬取成功数据已保存到{excel_filename})returndfexceptExceptionase:# 捕获所有异常打印错误信息print(f❌ 爬取失败错误信息{e})returnNoneif__name____main__:# 12. 在这里修改你要爬的城市ID和城市名称# 北京101010100上海101020100广州101280101深圳101280601# 你可以自己搜索城市复制URL里的IDcity_id101010100city_name北京# 13. 调用爬取函数get_weather(city_id,city_name)五、运行代码一键搞定在VS Code的终端里输入下面的命令按回车python weather_spider.py如果终端显示“✅ 爬取成功数据已保存到北京_近7天天气_20260225.xlsx”就说明成功了打开VS Code左侧的“资源管理器”第一个图标你会看到生成的Excel文件双击打开就能看到近7天的天气数据了六、新手常见问题解答我帮你踩过的坑1. 终端提示“‘python’ 不是内部或外部命令”原因安装Python时没有勾选“Add Python 3.x.x to PATH”。解决方法卸载Python重新安装一定要勾选“Add Python 3.x.x to PATH”或者手动添加Python到环境变量新手建议重新安装。2. 终端提示“ModuleNotFoundError: No module named ‘xxx’”原因没有安装对应的库或者安装库时用了错误的镜像源。解决方法重新用清华镜像源安装对应的库比如pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple检查VS Code的Python解释器是否正确点击VS Code右下角的Python版本号选择你安装的Python 3.x.x。3. 爬取到的中文是乱码原因没有设置网页编码为UTF-8。解决方法检查代码里有没有response.encoding utf-8如果没有加上这一行。4. 终端提示“请求超时”原因网络不好或者天气网站暂时访问不了。解决方法检查网络连接把代码里的timeout10改成timeout20延长超时时间过一会儿再试。七、进阶玩法有兴趣可以试试爬取多个城市的天气把城市ID和城市名称放在一个列表里用循环调用get_weather函数。每天自动运行Windows用“任务计划程序”Mac/Linux用“crontab”设置每天早上8点自动运行脚本。发送邮件用Python的smtplib库把生成的Excel文件自动发送到行政部的邮箱。结尾怎么样是不是很简单零基础也能1小时搞定这个脚本不仅能帮行政部做统计你还可以用它爬取自己所在城市的天气每天出门前看一眼再也不用带错伞、穿错衣服了