【以下回答由 GPT 生成】
将问题中给出的代码进行修改如下:
import requests
from bs4 import BeautifulSoup
import csv
# 发送HTTP GET请求获取网页内容
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110 Safari/537.31'
}
url = 'http://www.weather.com.cn/weather/101230401.shtml'
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
html = response.text
# 使用BeautifulSoup解析HTML页面
soup = BeautifulSoup(html, 'html.parser')
# 找到包含天气情况的元素
weather_div = soup.find('div', class_='conMidtab2')
weather_table = weather_div.find_all('table')[5]
# 构建CSV文件的表头和数据
header = ['日期', '天气', '最高温度', '最低温度', '风向', '风力']
data = []
# 解析表格中的数据
for tr in weather_table.find_all('tr')[1:]:
tds = tr.find_all('td')
date = tds[0].text.strip()
weather = tds[1].text.strip()
max_temp = tds[2].text.strip()
min_temp = tds[3].text.strip()
wind_direction = tds[4].text.strip()
wind_power = tds[5].text.strip()
data.append([date, weather, max_temp, min_temp, wind_direction, wind_power])
# 将数据写入CSV文件
with open('PuTianTiQi.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['莆田市2023年8月天气情况'])
writer.writerow([])
writer.writerow(header)
writer.writerows(data)
print('数据写入完成!')
在代码中,我们首先导入需要使用的模块 requests
和 BeautifulSoup
。然后,我们发送一个HTTP GET请求来获取网页内容,并指定头文件的用户代理,以便伪装成浏览器访问。然后,我们使用 BeautifulSoup
解析获得的HTML页面。
接下来,我们通过观察网页的结构和元素,找到了包含天气情况的元素 weather_div
。然后,我们使用 find_all
方法查找其中的表格元素,将其中的第6个表格取出赋值给 weather_table
。注意,在 find_all
中使用 class_
参数来指定 class 名称。
然后,我们创建一个空的列表 data
用于存储解析出来的数据。之后,我们使用一个循环遍历表格中的每一行,使用 find_all
方法找出每一行中的所有单元格,并通过索引取出相应的数据。然后,将这些数据添加到 data
列表中。
最后,我们使用 csv
模块中的 writer
对象将数据写入到CSV文件中。我们首先指定文件名为 PuTianTiQi.csv
,然后使用 writerow
方法写入标题,writerows
方法写入多行数据。
最后,我们打印出 "数据写入完成!" 的提示,表示程序执行完毕。
请注意,以上代码是根据提供的网页结构和要解析的数据来进行修改的,如果网页结构或数据发生变化,可能需要相应地修改代码。
【相关推荐】