用Python爬取http://tianqi.com2020年所有月份的数据,存储为csv
时间: 2024-12-30 22:38:08 浏览: 10
要在Python中使用requests和BeautifulSoup库爬取并保存2020年每个月份的天气数据到CSV文件,首先你需要安装这两个库,如果还没安装可以使用pip进行安装:
```bash
pip install requests beautifulsoup4 pandas
```
接下来是一个简单的示例步骤,假设网站结构允许直接获取到所需数据:
1. 导入必要的库:
```python
import requests
from bs4 import BeautifulSoup
import csv
import pandas as pd
from datetime import datetime
```
2. 定义URL的规律,因为不是每个月份都有数据,我们可以先列出2020年的月份:
```python
months = ['01', '02', '03', ..., '12']
```
3. 创建一个函数来抓取单个月份的数据:
```python
def fetch_month_data(month):
url = f'http://tianqi.com/weather/monthly/{month}'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 解析页面内容以提取数据(这里假设数据在特定的HTML标签内)
data = parse_weather_data(soup) # 提供实际解析函数
return data
```
4. 实现`parse_weather_data()`函数来从HTML中解析数据。这将取决于网站的具体结构。例如:
```python
def parse_weather_data(soup):
# 假设数据在class='weather-data'的div下
weather_table = soup.find('div', class_='weather-data')
rows = weather_table.find_all('tr') # 获取表格行
data_list = []
for row in rows:
cells = row.find_all('td') # 获取单元格
date, temp, ... = cells # 提取需要的数据
data_list.append([date.text, temp.text, ...]) # 格式化数据列表
return data_list
```
5. 爬取所有月份的数据并写入CSV:
```python
results = {}
for month in months:
results[datetime.strptime(month, '%m')] = fetch_month_data(month)
# 将结果转换为pandas DataFrame
df = pd.DataFrame(results).T
# 写入CSV文件
with open('tianqi_2020.csv', 'w', newline='', encoding='utf-8-sig') as csvfile:
writer = csv.writer(csvfile)
df.to_csv(writer, index=False)
```
注意:上述代码是基于假设的网页结构编写,实际操作时需要查看目标网站的源码确定数据的位置和格式。并且,有些网站可能会有反爬虫机制或版权保护,所以在爬取数据前,请务必确保遵守网站的使用条款。
阅读全文