爬取上海市2021和2022两年的历史天气数据(http://www.tianqihoubao.com/lishi/shanghai.html%EF%BC%89 通过正则表达式提取日期、天气、温度、风力风向,写入csv文件
时间: 2024-10-16 08:20:41 浏览: 69
爬取上海市历史天气数据并使用正则表达式提取信息通常需要以下步骤:
1. **获取网页内容**:
使用Python的`requests`库来发送HTTP请求,获取指定URL的HTML内容。
```python
import requests
url = "http://www.tianqihoubao.com/lishi/shanghai.html"
response = requests.get(url)
html_content = response.text
```
2. **解析HTML**:
使用如BeautifulSoup或lxml这样的库来解析HTML,找到包含所需数据的部分。正则表达式在这里可能不够灵活,因为网页结构可能会变化。所以通常先定位到特定的元素(例如日期、天气等),然后提取其内嵌文本。
```python
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_content, 'lxml')
weather_data_elements = soup.find_all('div', class_='weather_info') # 假设日期、天气等数据在这些元素里
```
3. **提取信息**:
针对每个找到的元素,使用正则表达式或其他方法提取日期、天气和温度。由于没有具体的HTML结构,这里给出的是通用示例,实际应用时可能需要调整。
```python
import re
def extract_weather_info(element):
date_pattern = r'\d{4}-\d{2}-\d{2}' # 根据实际页面找规律,假设日期格式如此
temp_pattern = r'(\d+\.\d+|\d+)℃' # 温度可能有小数点,假设格式是数字加上单位℃
date = re.search(date_pattern, str(element)).group(0)
weather = element.text.split(':')[0] # 假设天气信息在冒号前
temperature = re.search(temp_pattern, str(element)).group(0)
return date, weather, temperature
data = [extract_weather_info(element) for element in weather_data_elements]
```
4. **保存到CSV**:
使用pandas库将提取的数据写入CSV文件。
```python
import pandas as pd
data_list = [list(row) for row in data]
df = pd.DataFrame(data_list, columns=['日期', '天气', '温度'])
filename = 'shanghai_weather_2021_2022.csv'
df.to_csv(filename, index=False)
```
**注意事项**:
- 正则表达式依赖于HTML的具体结构,如果网站结构改变,可能需要更新正则模式。
- 这只是一个基本示例,实际操作中可能还需要处理异常,比如网络错误、网页编码等问题。
阅读全文