Python爬中国天气网站,获取沈阳近一周的天气预报并以表格形式写到word文件中
时间: 2025-07-20 17:18:33 浏览: 5
<think>我们计划以下步骤:
1. 爬取中国天气网(www.weather.com.cn)上沈阳近一周的天气预报。
2. 解析网页内容,提取日期、天气状况、温度等信息。
3. 将数据整理成表格形式,并写入Word文档。
注意:中国天气网的数据是动态加载的,可能需要分析其数据接口,或者使用Selenium等工具。但为了简化,我们首先尝试查看是否有静态页面或直接的数据接口。
经过查看,中国天气网提供7天天气预报,我们可以直接访问沈阳的7天天气预报页面,例如:http://www.weather.com.cn/weather/101070101.shtml
观察页面结构,数据在HTML中,我们可以通过解析HTML来获取数据。
步骤:
1. 使用requests获取网页HTML。
2. 使用BeautifulSoup解析HTML,提取需要的数据。
3. 使用python-docx库创建Word文档并添加表格。
需要安装的库:
- requests
- beautifulsoup4
- python-docx
安装命令:
pip install requests beautifulsoup4 python-docx
代码步骤:
1. 发送HTTP请求获取网页内容。
2. 解析HTML,找到包含7天天气预报的标签。通过查看网页结构,我们发现7天的数据在id="7d"的div中,然后每个天气信息在ul和li标签中。
3. 提取日期、天气、温度等信息。
4. 创建Word文档,添加表格,将数据写入表格。
注意:中国天气网可能有反爬机制,建议设置请求头模拟浏览器访问。
具体实现:
1. 定义URL和请求头。
2. 发送请求,获取响应。
3. 使用BeautifulSoup解析。
4. 找到id="7d"的div,然后找到里面的ul,每个li对应一天。
5. 遍历li,提取日期(日期在h1标签中),天气状况(在p class="wea"中),温度(在p class="tem"中,包括最高温度和最低温度)。
6. 将提取的数据存储到列表中。
7. 使用python-docx创建文档,添加表格,将数据写入表格。
注意:温度数据中可能有换行和空格,需要处理。
代码示例:</think># Python爬取中国天气网沈阳一周天气预报并导出到Word表格
## 解决思路
1. 分析中国天气网沈阳天气预报页面结构
2. 使用requests和BeautifulSoup爬取数据
3. 整理数据为结构化格式
4. 使用python-docx库创建Word文档和表格
## 完整代码实现
```python
import requests
from bs4 import BeautifulSoup
from docx import Document
from docx.shared import Inches, Pt
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from datetime import datetime, timedelta
def get_shenyang_weather():
"""爬取沈阳一周天气预报数据"""
# 设置请求头模拟浏览器访问
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',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
# 中国天气网沈阳7天天气预报页面
url = 'http://www.weather.com.cn/weather/101070101.shtml'
try:
response = requests.get(url, headers=headers, timeout=10)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'html.parser')
# 查找7天天气预报区域
weather_box = soup.find('div', id='7d')
if not weather_box:
raise ValueError("未找到天气预报数据区域")
# 提取日期和天气信息
weather_data = []
ul_tag = weather_box.find('ul', class_='t clearfix')
li_tags = ul_tag.find_all('li')[:7] # 只取7天数据
for li in li_tags:
# 提取日期
date = li.find('h1').get_text().strip()
# 提取天气状况
wea = li.find('p', class_='wea').get_text().strip()
# 提取温度
tem = li.find('p', class_='tem')
high_temp = tem.find('span').get_text().strip() + '℃' # 最高温
low_temp = tem.find('i').get_text().strip() # 最低温
# 提取风向和风力
win = li.find('p', class_='win')
wind_direction = win.find('em').find('span')['title'] if win.find('em').find('span') else "未知"
wind_level = win.find('i').get_text().strip()
weather_data.append({
'日期': date,
'天气': wea,
'最高温度': high_temp,
'最低温度': low_temp,
'风向': wind_direction,
'风力': wind_level
})
return weather_data
except Exception as e:
print(f"爬取数据时出错: {e}")
return None
def export_to_word(weather_data, filename='沈阳天气预报.docx'):
"""将天气数据导出到Word表格"""
if not weather_data:
print("无有效天气数据可导出")
return
try:
# 创建Word文档
doc = Document()
# 添加标题
title = doc.add_heading('沈阳一周天气预报', level=0)
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 添加日期信息
today = datetime.now().strftime('%Y年%m月%d日')
date_para = doc.add_paragraph(f'生成日期: {today}')
date_para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 添加表格
table = doc.add_table(rows=1, cols=len(weather_data[0]))
table.style = 'Light Shading Accent 1' # 使用预定义表格样式
# 添加表头
headers = list(weather_data[0].keys())
header_cells = table.rows[0].cells
for i, header in enumerate(headers):
header_cells[i].text = header
header_cells[i].paragraphs[0].runs[0].font.bold = True
header_cells[i].paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 添加数据行
for data in weather_data:
row_cells = table.add_row().cells
for i, key in enumerate(headers):
row_cells[i].text = str(data[key])
row_cells[i].paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 设置表格字体
for row in table.rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
for run in paragraph.runs:
run.font.size = Pt(11)
# 保存文档
doc.save(filename)
print(f"天气预报已成功导出到: {filename}")
return True
except Exception as e:
print(f"导出到Word时出错: {e}")
return False
if __name__ == "__main__":
print("开始爬取沈阳天气预报...")
weather_data = get_shenyang_weather()
if weather_data:
print("爬取成功! 数据预览:")
for data in weather_data[:2]: # 显示前两天的数据预览
print(data)
# 生成带日期的文件名
today = datetime.now().strftime("%Y%m%d")
filename = f"沈阳一周天气预报_{today}.docx"
# 导出到Word
export_to_word(weather_data, filename)
else:
print("未能获取天气预报数据")
```
## 代码说明
### 1. 爬取天气数据
- 使用requests库获取中国天气网沈阳天气预报页面
- 通过BeautifulSoup解析HTML结构
- 定位7天天气预报区域并提取以下信息:
- 日期
- 天气状况
- 最高/最低温度
- 风向和风力
### 2. 数据处理
- 将爬取的数据整理为字典列表
- 每个字典包含一天的所有天气信息
### 3. 导出到Word
- 使用python-docx库创建Word文档
- 添加标题和生成日期
- 创建表格并填充天气数据
- 应用表格样式并设置字体格式
- 保存为带日期的Word文件
## 使用说明
1. 安装所需库:
```bash
pip install requests beautifulsoup4 python-docx
```
2. 运行脚本:
```bash
python weather_crawler.py
```
3. 脚本执行后,将在当前目录生成"沈阳一周天气预报_YYYYMMDD.docx"文件
## 注意事项
- 网站结构可能变更,需要定期检查CSS选择器
- 中国天气网可能有反爬机制,可尝试添加更多请求头信息
- 如果运行失败,请检查网络连接和网站可访问性
## 效果预览
生成的Word文档将包含以下内容:
```
沈阳一周天气预报
生成日期: 2023年06月15日
+----------+--------+----------+----------+------+------+
| 日期 | 天气 | 最高温度 | 最低温度 | 风向 | 风力 |
+----------+--------+----------+----------+------+------+
| 6月15日 | 多云 | 28℃ | 18℃ | 西南 | 3-4级|
| 6月16日 | 阵雨 | 26℃ | 17℃ | 东北 | 2-3级|
| ... | ... | ... | ... | ... | ... |
+----------+--------+----------+----------+------+------+
```
此代码实现了从中国天气网爬取沈阳一周天气预报,并将数据整理后导出到格式良好的Word表格中。
阅读全文
相关推荐












