给我一个爬虫爬取近一个月的疫情数据代码,包括网络请求,html解析,数据清洗,数据储存,要求代码注释清晰
时间: 2024-04-02 20:33:21 浏览: 62
好的,以下是一个爬取近一个月疫情数据的 Python 代码,包括网络请求、HTML解析、数据清洗和储存,代码注释清晰易懂:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
import datetime
# 获取当前日期并转换为字符串格式
now = datetime.datetime.now()
now_str = now.strftime('%Y-%m-%d')
# 构造 URL
url = 'https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_3'
# 发送网络请求
response = requests.get(url)
# 解析 HTML
soup = BeautifulSoup(response.text, 'html.parser')
# 获取数据表格
table = soup.find('table', {'class': 'VirusTable_1-1-300_3AY4F9'})
# 获取表格头部
headers = []
for th in table.find_all('th'):
headers.append(th.text.strip())
# 获取表格内容
rows = []
for tr in table.find_all('tr')[1:]:
row = []
for td in tr.find_all('td'):
row.append(td.text.strip())
rows.append(row)
# 转换为 DataFrame 格式
df = pd.DataFrame(rows, columns=headers)
# 删除不需要的列
df = df.drop(['新增'], axis=1)
# 将日期转换为时间戳
df['统计时间'] = pd.to_datetime(df['统计时间'], format='%m.%d').apply(lambda x: x.replace(year=2020))
# 只保留近一个月的数据
df = df[df['统计时间'] >= now - datetime.timedelta(days=30)]
# 保存为 CSV 文件
df.to_csv(f'疫情数据_{now_str}.csv', index=False)
```
代码解释:
1. 导入必要的库:requests 用于发送网络请求,BeautifulSoup 用于解析 HTML,pandas 用于数据处理和储存,datetime 用于获取当前日期。
2. 获取当前日期并转换为字符串格式。
3. 构造 URL。
4. 发送网络请求,并获取响应的 HTML。
5. 使用 BeautifulSoup 解析 HTML。
6. 获取数据表格。
7. 获取表格头部。
8. 获取表格内容。
9. 将表格内容转换为 DataFrame 格式。
10. 删除不需要的列。
11. 将日期转换为时间戳。
12. 只保留近一个月的数据。
13. 保存为 CSV 文件,文件名包含当前日期。
注意:这个代码只适用于爬取百度疫情数据页面中的数据,如果要爬取其他网站的疫情数据,需要根据实际情况修改代码。
阅读全文