爬虫-23至22年全省天气信息-2345网站天气数据爬取


from selenium import webdriver  # 导入 Selenium 库,用于模拟浏览器操作
import requests  # 导入 requests 库,用于发送 HTTP 请求
from bs4 import BeautifulSoup  # 导入 BeautifulSoup 库,用于解析 HTML
import html.parser  # 导入 html.parser 模块
import time  # 导入 time 模块,用于暂停执行
import pandas as pd  # 导入 pandas 库,用于数据处理和分析

driver = webdriver.Chrome()  # 设置谷歌浏览器驱动
url = 'https://tianqi.2345.com/wea_history/60899.htm'  # 目标网页的 URL
driver.get(url)  # 打开目标网页,使用浏览器访问
data = []  # 创建一个空数组,用于存储标签文本
for i in range(1, 21):  # 循环从 1 到 20(共 20 个月的数据)
    page_content = driver.page_source  # 获取当前页面的源代码
    soup = BeautifulSoup(page_content, 'html.parser')  # 将页面源代码解析为 Beautiful Soup 对象
    weather = soup.find('table')  # 找到页面中的 table 标签
    for row in weather.find_all('tr'):  # 遍历 table 中的所有 tr 标签
        for td in row.find_all('td'):  # 遍历 tr 标签中的所有 td 标签
            data.append(td.text)  # 将 td 标签的文本添加到数据数组中
    element = driver.find_element('id', 'js_prevMonth')  # 找到 ID 为 js_prevMonth 的元素
    time.sleep(6)  # 暂停 6 秒,以便网页加载完成
    element.click()  # 点击上个月按钮
    time.sleep(6)  # 暂停 6 秒,以便网页加载完成

new_data = [data[i:i + 6] for i in range(0, len(data), 6)]  # 将数据按行分组,每行包含 6 个元素
df = pd.DataFrame(new_data,columns=['日期', '最高温', '最低温', '天气', '风力风向', '空气质量指数'])  # 创建一个 DataFrame,并指定列名
df[['日期', '星期']] = df['日期'].str.split(' ', expand=True)  # 将日期列拆分为日期和星期两列
df[['空气质量指数', '空气质量']] = df['空气质量指数'].str.split(' ', expand=True)  # 将空气质量指数列拆分为数值和质量两列
df = df.reindex(columns=['日期', '星期', '最高温', '最低温', '天气', '风力风向', '空气质量指数', '空气质量'])  # 重新排列 DataFrame 的列顺序
df.to_excel('宁化2022至2023年历史天气.xlsx', index=False)  # 将 DataFrame 写入 Excel 文件,指定文件名

driver.page_source

是一个 Selenium WebDriver 对象的属性,它返回当前网页的源代码字符串。换句话说,它返回整个网页的 HTML 代码。在给定的代码中,driver.page_source 用于获取当前网页的源代码,然后将其传递给 BeautifulSoup 解析器进行解析。这样可以从网页中提取所需的数据,比如表格中的天气信息。

[data[i:i+6] for i in range(0, len(data), 6)]
  • range(0, len(data), 6):生成一个从 0 开始,步长为 6 的索引序列。这样可以遍历 data 数组中的每个元素,步长为 6。
  • data[i:i+6]:对于每个索引 i,取索引范围从 i 到 i+6(不包括 i+6)的子列表。
  • [data[i:i+6] for i in range(0, len(data), 6)]:使用列表推导式,遍历索引序列生成包含切割后的子列表的新列表。

简而言之,这行代码将原始的一维数据数组 data 切分成了多个长度为 6 的子列表,每个子列表表示一组数据,例如日期、最高温度、最低温度、天气、风力风向和空气质量指数。这有助于后续处理和分析每个子列表中的数据。

df = pd.DataFrame(new_data,columns=['日期', '最高温', '最低温', '天气', '风力风向', '空气质量指数'])

这行代码使用 Pandas 库创建一个 DataFrame 对象,其中包含了切割后的数据列表 new_data,并指定了每列对应的列名。

具体解释如下:

  • pd.DataFrame(new_data, columns=['日期', '最高温', '最低温', '天气', '风力风向', '空气质量指数']):使用 pd.DataFrame() 函数,传入切割后的数据列表 new_data 和列名列表 ['日期', '最高温', '最低温', '天气', '风力风向', '空气质量指数']。这将创建一个 DataFrame 对象,其中每列对应于给定的列名。

换句话说,这行代码将切割后的数据列表 new_data 转换为 Pandas 的 DataFrame 对象,并根据提供的列名创建相应的列,每列对应于数据中的不同属性,比如日期、最高温度、最低温度、天气、风力风向和空气质量指数。这样可以方便地对数据进行处理、分析和操作。

 

DataFrame
 

DataFrame 是 Pandas 库中的一种数据结构,类似于表格或电子表格。它是一个二维的数据结构,可以存储和操作具有不同数据类型的数据。

DataFrame 对象由行索引(index)和列名(columns)组成,可以将其视为一个由 Series 组成的字典。每个列都是一个 Series 对象,它们具有相同的长度。通过使用 DataFrame,可以方便地进行数据清洗、分析、筛选和操作。

DataFrame 提供了许多内置的方法和功能,例如:

  • 访问和修改数据;
  • 列选择和切片;
  • 数据过滤和查询;
  • 缺失值处理;
  • 数据排序和排序;
  • 统计计算和聚合;
  • 数据可视化等。
     

当创建了一个DataFrame对象后,我们可以使用它的各种方法和功能来操作和分析数据。以下是几个示例:

  1. 访问和修改数据:
# 访问某一列的数据
column_data = dataframe['列名']

# 访问某一行的数据
row_data = dataframe.loc[row_index]

# 修改某一列的数据
dataframe['列名'] = new_column_data

# 修改某一单元格的数据
dataframe.at[row_index, '列名'] = new_value
  1. 列选择和切片:
# 选择多个列
selected_columns = dataframe[['列名1', '列名2']]

# 切片选择行数据
sliced_rows = dataframe[start:end]
  1. 数据过滤和查询:
# 条件过滤
filtered_data = dataframe[dataframe['列名'] > threshold]

# 使用query()方法进行查询
query_result = dataframe.query('条件表达式')
  1. 缺失值处理:
    # 删除包含缺失值的行或列
    cleaned_dataframe = dataframe.dropna()
    
    # 填充缺失值
    filled_dataframe = dataframe.fillna(value)

  2. 数据排序和排序:
# 按某一列进行升序排序
sorted_dataframe = dataframe.sort_values('列名')

# 按某一列进行降序排序
sorted_dataframe = dataframe.sort_values('列名', ascending=False)
  1. 统计计算和聚合:
    # 计算某一列的平均值
    mean_value = dataframe['列名'].mean()
    
    # 对某一列进行聚合操作
    aggregated_result = dataframe.groupby('列名').sum()

这只是一些DataFrame对象的常见用法示例,实际使用中还有更多功能和方法可供探索。通过使用这些功能,我们可以灵活地处理和分析数据,提取有用的信息,并进行各种统计计算和可视化展示。

拿一些数据当案例,举个例子看看

import pandas as pd

# 创建数据字典
data = {
    '日期': ['2023-08-20', '2023-08-21', '2023-08-22', '2023-08-23'],
    '产品名称': ['A', 'B', 'A', 'B'],
    '销售额': [1000, 1500, 800, 1200],
    '销售量': [50, 30, 40, 20]
}

# 创建 DataFrame 对象
df = pd.DataFrame(data)

print(df)

输出结果

           日期  产品名称   销售额  销售量
0  2023-08-20     A  1000   50
1  2023-08-21     B  1500   30
2  2023-08-22     A  800    40
3  2023-08-23     B  1200   20

 

在这个案例中,我们创建了一个包含销售数据的 DataFrame 对象。它有四列:日期、产品名称、销售额和销售量。每一行代表一次销售记录,每一列包含相应的数据。

现在,我们可以使用 DataFrame 提供的方法和功能对数据进行各种操作。例如,我们可以计算某个产品的平均销售额、按日期排序数据、选择特定条件下的销售记录等等。

以下是一些示例操作:

# 计算销售额平均值
average_sales = df['销售额'].mean()
print("平均销售额:", average_sales)

# 按日期排序数据
sorted_df = df.sort_values('日期')
print("按日期排序的数据:")
print(sorted_df)

# 选择产品名称为 A 的销售记录
product_a_sales = df[df['产品名称'] == 'A']
print("产品 A 的销售记录:")
print(product_a_sales)
 

输出结果

平均销售额: 1125.0
按日期排序的数据:
           日期  产品名称   销售额  销售量
0  2023-08-20     A  1000   50
1  2023-08-21     B  1500   30
2  2023-08-22     A  800    40
3  2023-08-23     B  1200   20

产品 A 的销售记录:
           日期  产品名称   销售额  销售量
0  2023-08-20     A  1000   50
2  2023-08-22     A  800    40
 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值