下面我将详细讲解如何实现一个Python天气预报采集器。
1. 爬取目标网站
首先,我们需要先确定一个目标网站,在这里我们以“中国天气网”(http://www.weather.com.cn)为例。
2. 分析网站结构
接着,我们需要分析该网站的结构,找到我们需要爬取的信息所在的位置和格式。可以打开浏览器的开发者工具,在Network标签页下查看网页请求,找到我们需要的API接口的URL。在这个示例中,我们需要获取某城市的天气预报信息,可以通过以下URL获取:
http://www.weather.com.cn/weather/{城市代码}.shtml
其中,城市代码可以通过在该网站的搜索框中输入城市名称,然后在网址中找到相应的代码。
此外,我们还需要查看网站的源代码,找到需要爬取的信息所在的HTML标签及其类名或ID名。
在这个示例中,我们成功找到了需要爬取的城市名称、天气状况、温度、风力、湿度等信息在网页中的位置。具体的HTML标签及类名如下:
- 城市名称:class为"tj_location"的div标签
- 天气状况:class为"wea"的em标签
- 温度:class为"tem"的span标签
- 风力:class为"win"的em标签
- 湿度:class为"shidu"的b标签
3. 构建爬虫代码
有了爬取目标和所需信息的位置和格式,我们就可以开始构建Python爬虫代码了。下面是代码示例:
import requests
from bs4 import BeautifulSoup
# 构造请求URL
city_code = "101010100" # 北京的城市代码
url = f"http://www.weather.com.cn/weather/{city_code}.shtml"
# 发送请求
response = requests.get(url)
# 解析HTML
soup = BeautifulSoup(response.content, "html.parser")
# 获取所需信息
location = soup.find("div", class_="tj_location").text
weather = soup.find("em", class_="wea").text
temp = soup.find("span", class_="tem").text
wind = soup.find("em", class_="win").text
humidity = soup.find("b", class_="shidu").text
# 打印结果
print(f"{location}\n天气状况:{weather}\n温度:{temp}\n风力:{wind}\n湿度:{humidity}")
运行该代码,即可在控制台输出所需信息。其输出示例如下:
北京\n天气状况:晴\n温度:28℃ / 23℃\n风力:南风微风\n湿度:51%
4. 处理多个城市的情况
上述代码只能获取一个城市的天气预报信息,并且城市代码需要手动输入。接下来,我们将进一步完善代码,实现从一个城市列表中自动获取所有城市的天气预报信息。
首先,在代码中定义城市列表:
city_list = [
{"name": "北京", "code": "101010100"},
{"name": "上海", "code": "101020100"},
{"name": "广州", "code": "101280101"},
{"name": "深圳", "code": "101280601"},
{"name": "杭州", "code": "101210101"}
# 更多城市可自行添加
]
接着,我们将上述代码封装到一个函数中,这个函数接受一个城市字典作为参数,然后返回该城市的天气预报信息。
def get_weather(city):
url = f"http://www.weather.com.cn/weather/{city['code']}.shtml"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
location = soup.find("div", class_="tj_location").text
weather = soup.find("em", class_="wea").text
temp = soup.find("span", class_="tem").text
wind = soup.find("em", class_="win").text
humidity = soup.find("b", class_="shidu").text
return f"{location}\n天气状况:{weather}\n温度:{temp}\n风力:{wind}\n湿度:{humidity}"
最后,在代码中调用该函数遍历城市列表,获取所有城市的天气预报信息。
for city in city_list:
print(get_weather(city))
运行该代码,即可在控制台输出所有城市的天气预报信息。
综上所述,以上就是Python天气预报采集器实现代码的完整攻略,包括爬取目标网站、分析网站结构、构建爬虫代码和处理多个城市的情况两个示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python天气预报采集器实现代码(网页爬虫) - Python技术站