新闻详情

新闻详情

首页 / 资讯中心 / 详情

Python爬虫入门:用Requests和BeautifulSoup抓取天气数据

发布时间:2026/9/10 10:57:21来源:尧图网络
Python爬虫入门:用Requests和BeautifulSoup抓取天气数据
1. Python Web爬虫入门指南最近在帮朋友抓取一些公开的天气数据时发现很多刚接触Python爬虫的同学都会卡在基础环节。今天我就用最直白的方式带大家从零开始搭建一个能实际运行的网页爬虫。不需要复杂的环境配置只要你会基本的Python语法跟着做就能上手。我们这次要用的就是Python里最经典的两个库Requests和BeautifulSoup。Requests负责把网页内容搬到我们的电脑里BeautifulSoup则像手术刀一样帮我们精准提取需要的数据。这种组合特别适合新手因为它既不会像Scrapy那样需要学习复杂框架又能完成90%的常见爬取任务。2. 环境准备与工具安装2.1 Python环境配置首先确保你的电脑已经安装了Python 3.6以上版本。在命令行输入python --version如果显示版本号说明已安装如果报错则需要去Python官网下载安装包。有个小技巧安装时务必勾选Add Python to PATH选项这样后续使用会方便很多。2.2 安装必备库我们将通过pip安装三个核心工具pip install requests beautifulsoup4 lxmlrequests网络请求库版本建议≥2.22.0beautifulsoup4HTML解析库版本建议≥4.9.0lxml解析器比Python内置的html.parser速度更快注意国内用户如果下载慢可以加上清华源参数-i https://pypi.tuna.tsinghua.edu.cn/simple3. 爬虫核心原理剖析3.1 HTTP请求与响应机制当我们在浏览器输入网址时背后其实发生了这样的对话浏览器客户端请给我这个网页的内容发送HTTP请求服务器好的这是你要的HTML文档返回HTTP响应Requests库就是帮我们自动化这个过程的工具。相比浏览器它更轻量且可编程。比如获取百度首页import requests response requests.get(https://www.baidu.com) print(response.text) # 打印网页源代码3.2 HTML解析原理服务器返回的HTML就像一份装修设计图BeautifulSoup就是帮我们看懂这份图纸的翻译官。它把杂乱的HTML标签转换成树形结构让我们可以用类似文件路径的方式定位元素。假设有这样一段HTMLdiv classweather span classcity北京/span span classtemp28℃/span /divBeautifulSoup可以这样提取数据from bs4 import BeautifulSoup soup BeautifulSoup(html_doc, lxml) city soup.find(span, class_city).text temp soup.find(span, class_temp).text4. 实战天气预报爬虫开发4.1 目标网站分析我们以中国天气网为例http://www.weather.com.cn。打开页面后按F12进入开发者工具在Elements面板查看网页结构在Network面板观察数据请求发现城市天气数据主要在class为tem和sky的div中。这里有个重要技巧始终先检查robots.txt文件http://www.weather.com.cn/robots.txt确认允许爬取的路径。4.2 完整爬取代码实现import requests from bs4 import BeautifulSoup def get_weather(city_code): url fhttp://www.weather.com.cn/weather/{city_code}.shtml headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } try: response requests.get(url, headersheaders, timeout5) response.encoding utf-8 soup BeautifulSoup(response.text, lxml) # 提取天气数据 weather_div soup.find(div, class_t) date weather_div.find(h1).text temp weather_div.find(p, class_tem).text.strip() weather weather_div.find(p, class_wea).text return { date: date, temperature: temp, weather: weather } except Exception as e: print(f爬取失败: {str(e)}) return None # 示例获取北京天气城市代码可以从网页URL获取 print(get_weather(101010100))4.3 关键参数说明User-Agent模拟浏览器访问避免被识别为爬虫timeout设置超时时间防止长时间等待encoding指定编码格式解决中文乱码问题try-except异常处理增强程序健壮性5. 高级技巧与反爬对策5.1 常见反爬机制破解频率限制遇到429错误时import time time.sleep(random.uniform(1, 3)) # 随机延迟IP封禁使用代理IP池proxies { http: http://proxy_ip:port, https: https://proxy_ip:port } requests.get(url, proxiesproxies)动态加载对于AJAX请求需要分析XHR接口在开发者工具的Network面板找XHR类型的请求直接调用数据接口获取JSON格式数据5.2 数据存储方案爬取的数据可以多种方式保存# CSV存储 import csv with open(weather.csv, a, newline) as f: writer csv.writer(f) writer.writerow([date, temp, weather]) # Excel存储需安装openpyxl from openpyxl import Workbook wb Workbook() ws wb.active ws.append([date, temp, weather]) wb.save(weather.xlsx) # 数据库存储SQLite示例 import sqlite3 conn sqlite3.connect(weather.db) cursor conn.cursor() cursor.execute(INSERT INTO weather VALUES (?,?,?), (date, temp, weather)) conn.commit()6. 常见问题排查手册6.1 错误代码速查表错误现象可能原因解决方案404 Not FoundURL错误或页面不存在检查URL拼写确认页面可访问403 Forbidden被服务器拒绝访问添加Headers模拟浏览器429 Too Many Requests请求过于频繁增加延迟时间或使用代理IP中文乱码编码格式不匹配设置response.encodingutf-8AttributeError元素查找失败先用print(soup)确认HTML结构6.2 调试技巧逐步打印法print(response.status_code) # 先看状态码 print(response.text[:500]) # 查看部分返回内容 print(soup.prettify()) # 格式化输出HTML结构XPath辅助定位 虽然BeautifulSoup主要用find方法但有时XPath更直观from lxml import etree tree etree.HTML(response.text) city tree.xpath(//span[classcity]/text())[0]7. 项目扩展方向掌握了基础爬虫后可以尝试这些进阶玩法定时爬取用schedule库实现每日自动抓取import schedule import time def job(): print(开始执行爬取任务...) # 爬虫代码 schedule.every().day.at(08:00).do(job) while True: schedule.run_pending() time.sleep(1)可视化展示用matplotlib绘制温度变化曲线import matplotlib.pyplot as plt dates [周一, 周二, 周三] temps [22, 25, 19] plt.plot(dates, temps) plt.title(一周温度变化) plt.show()邮件通知通过smtplib发送天气预警import smtplib from email.mime.text import MIMEText def send_email(content): msg MIMEText(content) msg[Subject] 天气预警 smtp smtplib.SMTP(smtp.163.com) smtp.login(your_email163.com, password) smtp.sendmail(your_email163.com, targetqq.com, msg.as_string())8. 法律与道德规范在开发爬虫时务必注意遵守robots.txt协议不爬取个人隐私数据控制请求频率避免对目标服务器造成压力商业用途需获得授权用户生成内容(UGC)需特别谨慎处理我个人的经验是对于重要项目最好在代码中加入延迟参数像这样# 人性化爬取设置 DELAY 3 # 秒 MAX_PAGE 10 # 限制爬取页数刚开始做爬虫时我曾因为没设置延迟导致IP被封。后来发现把爬虫想象成一个有礼貌的访客很重要——不要太频繁按门铃适可而止地获取需要的信息就好。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

claude-howto 实战:Claude Code Checkpoints 与 Rewind 完全指南——会话快照、安全回退与分支探索 2026/9/10 11:30:29

claude-howto 实战:Claude Code Checkpoints 与 Rewind 完全指南——会话快照、安全回退与分支探索

claude-howto 实战:Claude Code Checkpoints 与 Rewind 完全指南——会话快照、安全回退与分支探索 【免费下载链接】claude-howto A visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bri…

阅读更多 →
oh-my-pi 的 Glyph Token 协议:如何在 AI Agent 上下文中原样保留 nerd font 图标字符 2026/9/10 11:30:29

oh-my-pi 的 Glyph Token 协议:如何在 AI Agent 上下文中原样保留 nerd font 图标字符

oh-my-pi 的 Glyph Token 协议:如何在 AI Agent 上下文中原样保留 nerd font 图标字符 【免费下载链接】oh-my-pi ⌥ Coding agent with the IDE wired in 项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi 本文围绕 oh-my-pi 中一条特殊的"…

阅读更多 →
CANN/GE广播推断API 2026/9/10 11:30:29

CANN/GE广播推断API

BROADCAST_INFER 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlo…

阅读更多 →
RuView wifi-densepose-wasm-edge 安全审计深度解析:no_std WASM 传感模块的 15 项发现与修复实践 2026/9/10 11:30:29

RuView wifi-densepose-wasm-edge 安全审计深度解析:no_std WASM 传感模块的 15 项发现与修复实践

RuView wifi-densepose-wasm-edge 安全审计深度解析:no_std WASM 传感模块的 15 项发现与修复实践 【免费下载链接】RuView π RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all w…

阅读更多 →
CANN/GE任意类型操作符 2026/9/10 11:30:29

CANN/GE任意类型操作符

AnyTypeOperator 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlo…

阅读更多 →
LeetCode-Go 之 Hash Table 专题:模板驱动生成「2.13 Hash Table」题单与哈希技巧的 Go 实现 2026/9/10 11:27:29

LeetCode-Go 之 Hash Table 专题:模板驱动生成「2.13 Hash Table」题单与哈希技巧的 Go 实现

LeetCode-Go 之 Hash Table 专题:模板驱动生成「2.13 Hash Table」题单与哈希技巧的 Go 实现 【免费下载链接】LeetCode-Go ✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% | LeetCode 题解 项目地址: https://gitcode.com/GitHub_Tren…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞