简介
本教程将介绍如何使用Python和BS4库来爬取天气预报数据。我们将使用Python的requests、BeautifulSoup和pandas库来获取和解析HTML,以及将数据存储在CSV文件中。
准备工作
在开始本教程之前,需要安装好以下软件。
- Python 3.x
- requests库
- BeautifulSoup库
- pandas库
你可以在终端或命令提示符中使用以下命令安装它们。
pip install requests
pip install beautifulsoup4
pip install pandas
我们也需要一些模块的导入来实现获取HTML和分析的功能。请在Python文件中输入以下代码:
import requests
from bs4 import BeautifulSoup
import pandas as pd
获取HTML
接下来,我们需要从一个网站中获取天气预报数据。这里我将使用的是中国气象网(http://www.weather.com.cn)。
url = 'http://www.weather.com.cn/weather/101020100.shtml'
response = requests.get(url)
通过以上代码,我们可以使用requests库从http://www.weather.com.cn/weather/101020100.shtml获取HTML数据。response变量中将存储得到的HTML页面。
解析HTML
接下来,我们需要使用BeautifulSoup库来解析我们获取的HTML文件。以下是我们将使用的代码:
soup = BeautifulSoup(response.text, 'html.parser')
我们将使用BeautifulSoup库的html.parser解析器将HTML解析为BeautifulSoup对象,然后可以使用类似于字典的方式来访问HTML中的元素和属性。
获取天气数据
接下来,我们将抓取每日天气预报数据。首先,需要确定页面上每一天的数据是如何组织的。查看HTML代码,我们可以发现所有的每日预报都是通过class名称为“sky skyid”的div元素对包含在一个id为“7d”的div元素下面。
为了定位每天的气象数据,我们可以使用find_all()函数来找到所有的class为“sky skyid”的div元素。以下是我们可以使用的代码:
forecast_list = soup.find(id="7d").find_all(class_="sky skyid")
find()和find_all()函数都可以搜索HTML中的元素。第一个函数返回第一个满足条件的元素,第二个函数返回所有满足条件的元素列表。这里,我们使用find_all()函数来获取包含气象数据的所有div元素。
接下来,让我们来看看每个气象数据DIV元素的结构。我们发现每个气象数据DIV元素中包含了天气图标、日期、天气状况和气温。以下是我们将从每个元素中提取的内容的代码:
data = []
for forecast in forecast_list:
date = forecast.find(class_="date").string.strip()
condition = forecast.find(class_="wea").string.strip()
temperature = forecast.find(class_="tem").text.strip()
icon = forecast.find(class_="wea_img").get('src')
data.append({
'Date': date,
'Condition': condition,
'Temperature': temperature,
'Icon': icon
})
我们首先在for循环中遍历每个气象数据DIV元素,并查找我们需要的信息。我们使用find()函数来获取每个元素中的元素,然后通过.string和.text属性获取它们的文本内容。此外,我们还使用.get()方法来获取天气图标URL。
最后,我们把我们收集到的数据存储在一个列表中,并为每个元素创建一个包含日期、天气状况、气温和气象图标的字典。
存储数据
现在,我们已经成功地从HTML页面中提取了所有的天气预报数据。接下来,我们将把这些数据存储在一个CSV文件中,以便稍后使用。
df = pd.DataFrame(data)
df.to_csv('weather.csv', index=False)
我们使用panda库的DataFrame方法将数据存储在一个DataFrame中,然后使用.to_csv()方法将它写入CSV文件中。
完整代码
现在我们来看一下如何将我们已经学到的所有部分组合在一起。以下是完整的Python程序,它将抓取天气预报并将结果存储在CSV文件中。
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'http://www.weather.com.cn/weather/101020100.shtml'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
forecast_list = soup.find(id="7d").find_all(class_="sky skyid")
data = []
for forecast in forecast_list:
date = forecast.find(class_="date").string.strip()
condition = forecast.find(class_="wea").string.strip()
temperature = forecast.find(class_="tem").text.strip()
icon = forecast.find(class_="wea_img").get('src')
data.append({
'Date': date,
'Condition': condition,
'Temperature': temperature,
'Icon': icon
})
df = pd.DataFrame(data)
df.to_csv('weather.csv', index=False)
结论
在本教程中,我们介绍了如何使用Python和BS4库来爬取天气预报数据。我们用Python获取HTML,用BeautifulSoup库对HTML进行解析,并将我们提取的数据存储在CSV文件中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python和BS4刮取天气预测数据 - Python技术站