帮我写一个用python爬取上海浦东新区、黄浦区、静安区、徐汇区、长宁区、虹口区、杨浦区、普陀区、闵行区、宝山区、嘉定区、金山区、松江区、青浦区、奉贤区、崇明区过去10年的天气数据并保存到tianqi.csv文件中的代码
时间: 2023-10-27 07:08:12 浏览: 90
用python爬取历史天气数据的方法示例
5星 · 资源好评率100%
好的,以下是用Python爬取上海各个区过去10年天气数据并保存到tianqi.csv文件中的代码:
```python
import requests
from bs4 import BeautifulSoup
import csv
# 上海各个区的区号
district_codes = {'浦东新区': '58367', '黄浦区': '58362', '静安区': '58365', '徐汇区': '58363', '长宁区': '58364',
'虹口区': '58366', '杨浦区': '58368', '普陀区': '58369', '闵行区': '58370', '宝山区': '58371',
'嘉定区': '58372', '金山区': '58373', '松江区': '58375', '青浦区': '58376', '奉贤区': '58377',
'崇明区': '58374'}
# 定义一个函数,用于爬取指定区、指定年份的天气数据,并返回一个列表
def get_weather_data(district, year):
url = 'http://www.tianqihoubao.com/lishi/' + district_codes[district] + '/month/' + year + '.html'
response = requests.get(url)
response.encoding = 'gb2312' # 网页使用的是gb2312编码
soup = BeautifulSoup(response.text, 'html.parser')
table = soup.find('table', class_='b')
trs = table.find_all('tr')[1:] # 第一行是表头,不需要
weather_data = []
for tr in trs:
tds = tr.find_all('td')
date = tds[0].text.strip()
high_temp = tds[1].text.strip()
low_temp = tds[2].text.strip()
weather = tds[3].text.strip()
wind_direction = tds[4].text.strip()
wind_speed = tds[5].text.strip()
weather_data.append([date, high_temp, low_temp, weather, wind_direction, wind_speed])
return weather_data
# 爬取过去10年的天气数据并保存到csv文件中
with open('tianqi.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['区域', '日期', '最高温度', '最低温度', '天气', '风向', '风速'])
for district in district_codes.keys():
for year in range(2011, 2021):
weather_data = get_weather_data(district, str(year))
for data in weather_data:
writer.writerow([district, data[0], data[1], data[2], data[3], data[4], data[5]])
```
运行以上代码后,会在当前目录下生成一个名为tianqi.csv的文件,里面包含了上海各个区过去10年的天气数据。
阅读全文