当前位置: 首页 > news >正文

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

最近公司行政部的小周找我吐槽:“每天早上要打开3个天气网站,抄全公司3个办公区的近7天天气、温度、风力,月底还要整理成Excel,眼睛都花了!”

我笑着说:“这事儿交给Python啊,1小时写个脚本,一键搞定,以后每天点一下就行。”

今天就把这个保姆级的实战教程分享给零基础的你——不用懂复杂的算法,不用写几百行代码,跟着步骤走,你也能做出自己的第一个实用爬虫!


一、准备工作:先把家伙事儿备齐(零基础也能10分钟搞定)

1. 安装Python

这是第一步,也是最容易卡的一步,别慌,跟着做:

  1. 打开Python官网:https://www.python.org/downloads/
  2. 点击黄色的“Download Python 3.x.x”按钮(3.x.x是最新稳定版,比如3.13.2,直接下就行)
  3. 关键!关键!关键!安装时,一定要勾选最下面的“Add Python 3.x.x to PATH”,不然后面用不了pip命令!
  4. 点击“Install Now”,等待安装完成,出现“Setup was successful”就可以了。

2. 安装VS Code(免费好用的编辑器)

  1. 打开VS Code官网:https://code.visualstudio.com/
  2. 点击蓝色的“Download for Windows”(Mac/Linux选对应的)
  3. 一路“Next”安装,安装完成后打开VS Code。
  4. 点击左侧的“扩展”图标(四个小方块),搜索“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天天气,打开天气后报,搜索“北京”,进入北京的天气页面,复制浏览器地址栏的URL:

http://www.weather.com.cn/weather/101010100.shtml

注意:每个城市都有一个唯一的ID,北京是101010100,上海是101020100,你可以自己搜索城市,复制URL里的ID。

2. 用浏览器的“开发者工具”分析网页

这是新手必须学会的技能,很简单:

  1. 在天气页面空白处,右键点击,选择“检查”(或者按快捷键F12)。
  2. 点击开发者工具左上角的“小箭头”图标(或者按快捷键Ctrl + Shift + C)。
  3. 用小箭头点击网页上的近7天的日期(比如“今天 02月25日”),开发者工具会自动定位到对应的HTML代码。
  4. 继续用小箭头点击天气状况(比如“晴”)、温度(比如“-2℃/10℃”)、风力(比如“东北风3-4级”),你会发现:
    • 近7天的所有天气数据,都在一个<ul class="t clearfix">标签里;
    • 每一天的天气数据,都在这个<ul>标签下的一个<li>标签里;
    • 日期在<h1>标签里;
    • 天气状况在<p class="wea">标签里;
    • 温度在<p class="tem">标签里;
    • 风力在<p class="win">标签里。

完美!结构非常清晰,我们可以用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. 构造天气页面的URLurl=f"http://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请求,获取网页内容response=requests.get(url,headers=headers,timeout=10)# 设置网页编码为UTF-8(避免中文乱码)response.encoding="utf-8"# 5. 检查请求是否成功(状态码200表示成功)ifresponse.status_code!=200:print(f"请求失败!状态码:{response.status_code}")returnNone# 6. 用BeautifulSoup4解析网页内容soup=BeautifulSoup(response.text,"html.parser")# 7. 找到包含近7天天气数据的<ul>标签weather_list=soup.find("ul",class_="t clearfix")ifnotweather_list:print("未找到天气数据!")returnNone# 8. 遍历<ul>标签下的所有<li>标签(每一天的天气)weather_data=[]forliinweather_list.find_all("li"):# 提取日期date_tag=li.find("h1")date=date_tag.text.strip()ifdate_tagelse"未知日期"# 提取天气状况wea_tag=li.find("p",class_="wea")weather=wea_tag.text.strip()ifwea_tagelse"未知天气"# 提取温度tem_tag=li.find("p",class_="tem")iftem_tag:# 温度标签里可能有最高温(<span>)和最低温(<i>)high_temp=tem_tag.find("span").text.strip()iftem_tag.find("span")else"未知"low_temp=tem_tag.find("i").text.strip()iftem_tag.find("i")else"未知"temperature=f"{low_temp}/{high_temp}"else:temperature="未知温度"# 提取风力win_tag=li.find("p",class_="win")ifwin_tag:# 风力标签里有风向(<i>)和风力等级(<span>)wind_dir=win_tag.find("i").text.strip()ifwin_tag.find("i")else"未知"wind_level=win_tag.find("span").text.strip()ifwin_tag.find("span")else"未知"wind=f"{wind_dir}{wind_level}"else:wind="未知风力"# 把提取到的数据添加到列表里weather_data.append({"日期":date,"天气状况":weather,"温度":temperature,"风力":wind})# 9. 用pandas把列表转换成DataFrame(方便生成Excel)df=pd.DataFrame(weather_data)# 10. 生成Excel文件名(包含城市名和当前日期,避免覆盖)current_date=datetime.now().strftime("%Y%m%d")excel_filename=f"{city_name}_近7天天气_{current_date}.xlsx"# 11. 把DataFrame保存到Excel文件里df.to_excel(excel_filename,index=False,engine="openpyxl")print(f"✅ 爬取成功!数据已保存到:{excel_filename}")returndfexceptExceptionase:# 捕获所有异常,打印错误信息print(f"❌ 爬取失败!错误信息:{e}")returnNoneif__name__=="__main__":# 12. 在这里修改你要爬的城市ID和城市名称# 北京:101010100,上海:101020100,广州:101280101,深圳:101280601# 你可以自己搜索城市,复制URL里的IDcity_id="101010100"city_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. 终端提示“请求超时”

原因:网络不好,或者天气网站暂时访问不了。
解决方法

  • 检查网络连接;
  • 把代码里的timeout=10改成timeout=20(延长超时时间);
  • 过一会儿再试。

七、进阶玩法(有兴趣可以试试)

  1. 爬取多个城市的天气:把城市ID和城市名称放在一个列表里,用循环调用get_weather函数。
  2. 每天自动运行:Windows用“任务计划程序”,Mac/Linux用“crontab”,设置每天早上8点自动运行脚本。
  3. 发送邮件:用Python的smtplib库,把生成的Excel文件自动发送到行政部的邮箱。

结尾

怎么样?是不是很简单?零基础也能1小时搞定!

这个脚本不仅能帮行政部做统计,你还可以用它爬取自己所在城市的天气,每天出门前看一眼,再也不用带错伞、穿错衣服了!

http://www.jsqmd.com/news/410148/

相关文章:

  • 2026年质量好的珍珠棉片材/覆膜珍珠棉厂家信誉综合参考 - 品牌宣传支持者
  • 新手友好!Python爬虫实战:爬取百度贴吧帖子,自动提取标题+正文+评论,保存为MD文件
  • GitHub 热榜项目 - 日榜(2026-02-25)
  • AI论文生成助手哪个好?2026年6款AI论文生成神器排行榜,一键解锁论文方向! - 掌桥科研-AI论文写作
  • HoRain云--Python语法错误排查:快速解决SyntaxError
  • python-flask新闻信息收集程序设计Pycharm vue django
  • 2026年比较好的低压储气罐/国内储气罐高评价厂家推荐 - 品牌宣传支持者
  • 【Matlab】MATLAB教程:fprintf写入文本——格式化写入txt与计算结果保存实操详解
  • HTTP/2 与 HTTP/3 请求走私:协议降级、隧道与应用层规避实战
  • 毕业设计答辩全流程指南:PPT 结构设计与答辩策略实战
  • 2026年知名的全钢工业洗衣机/洗衣机厂家用户好评推荐 - 品牌宣传支持者
  • Opencv 学习笔记:距离变换(DIST_L1 算法实战 + 归一化)
  • 深入底层:Qt 源码中那个“除以零”的宏定义神技
  • 豆包超能模式:全能AI助手的全新体验
  • AI写论文有妙招!4款AI论文生成工具,让写科研论文更高效!
  • 流量指纹混淆终极指南:模拟主流浏览器与合法应用的 TLS 指纹 (JA3/JA4) 实战
  • 2026年质量好的铠装缝/厂房铠装缝厂家采购参考指南(必看) - 品牌宣传支持者
  • 2026年靠谱的广东贝壳粉环保涂料/广东优质环保涂料厂家选购完整指南 - 品牌宣传支持者
  • AI写论文有妙招,这4款AI论文生成工具,让写职称论文更简单
  • 1985-2024年瞪羚、独角兽与科技型初创企业专利申请与授权信息
  • 算法导论阅读记录
  • .NET 10 C# 14 New Features 新增功能介绍-带修饰符的简单 lambda 参数
  • 【C++ vector】
  • AI 是怎么学会的?——从做错一道题说起
  • 2026年比较好的电摩机雕刻工具/打磨雕刻工具厂家热销推荐 - 品牌宣传支持者
  • Redis脑裂问题处理——基于min-replicas-to-write配置
  • 力扣解题-438. 找到字符串中所有字母异位词
  • 『NAS』在飞牛部署勉强能用的音乐下载器-Musicn
  • 闲置盒马鲜生礼品卡回收变现认准京顺回收平台 - 京顺回收
  • 朝阳宠物寄养哪家好?2026年条件和服务好的宠物寄养基地名单 - 品牌2025