9. 10月10日 天气预测-1.爬虫
9. 10月10日 天气预测-1.爬虫
数据来源
做机器学习我们需要尽量多和准确的数据,本次实例从www.meteomanz.com获取免费的天气数据
分析数据源网址规则
我们访问上一步的网站,可以发现有选择城市和时间的接口(PS:右上角的链接可以切换成英文)

这个就是我们要取到的数据了的地址,接下来解析这个网址的规则,如
http://www.meteomanz.com/sy2?cou=2250&ind=58362&d1=10&m1=09&y1=2024&d2=09&m2=10&y2=2024&so=002
这里面
?前的分别是http://网络协议,www.meteomanz.com域名,/sy2地址,我们主要关注?后的参数cou和ind是地区和城市代码d1,m1,y1是时间段的开始年月日d2,m2,y2是时间段的结束年月日
最多给30天的数据
分析页面规则
略
爬虫
from DrissionPage import SessionPage
# 创建会话页面
page = SessionPage()
# 访问指定的 URL
page.get('http://www.meteomanz.com/sy2?cou=2250&ind=58362&d1=10&m1=09&y1=2024&d2=09&m2=10&y2=2024&so=002')
table = page.ele('xpath:/html/body/div[1]/div/table')
print(table.text)
以上能正常访问,但不便于解析数据
from DrissionPage import SessionPage
# 创建会话页面
page = SessionPage()
# 访问指定的 URL
page.get('http://www.meteomanz.com/sy2?cou=2250&ind=58362&d1=10&m1=09&y1=2024&d2=09&m2=10&y2=2024&so=002')
table = page.ele('xpath:/html/body/div[1]/div/table')
rows = table.eles('xpath:.//tr') # 使用相对xpath查找所有行
for row in rows:
# 遍历每行中的每个单元格
cells = row.eles('xpath:.//td')
for c in cells:
print(c.text)
现在能正常获取到每一个值了,但是需要对值进行归类
定义以下变量
t_date = t_ave = t_max = t_min = t_prec = t_press = t_wind_dir = t_wind_sp = ''
- t_date 日期
- t_ave 平均温度
- t_max 最高温度
- t_min 最低温度
- t_prec 降雨量
- t_press 大气压
- t_wind_dir 风向
- t_wind_sp 风力
if cells:
t_date = t_ave = t_max = t_min = t_prec = t_press = t_wind_dir = t_wind_sp = ''
for i in range(0, len(cells)):
if i==0:
t_date=cells[i].text
if i==1:
t_ave=cells[i].text
if i==2:
t_max=cells[i].text
if i==3:
t_min=cells[i].text
if i==4:
t_prec=cells[i].text
if i==5:
t_press=cells[i].text
if i==6:
t_wind_dir=cells[i].text
if i==7:
t_wind_sp=cells[i].text
print(t_date,t_ave,t_max,t_min,t_prec,t_press,t_wind_dir,t_wind_sp)

这些不要,进行修改
t_press=cells[i].text.replace(" Hpa", "")
import re
t_wind_dir= re.sub(u"[º(.*?|N|W|E|S)]", "", cells[i].text)

存到csv中
import csv
with open('weather_data.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['Date', 'Ave Temp', 'Max Temp', 'Min Temp', 'Precipitation', 'Pressure (Hpa)', 'Wind Direction', 'Wind Speed'])
with open('weather_data.csv', mode='a', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow([t_date, t_ave, t_max, t_min, t_prec, t_press, t_wind_dir, t_wind_sp])

本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 现代职校董良
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果