Python爬取中国天气网天气数据

由于一些需要,想要获取今天的天气数据,于是又捡起了Python写了个爬虫用来获取中国天气网上的气象数据。由于我需要的数据比较简单,因为我只需要北京地区当天的温度(最低温度和最高温度)和天气,因此代码部分比较简单,下面就来讲讲这个爬取的过程。

第一步 网页分析

要进行爬虫设计,首先得分析网页的请求过程。首先,打开中国天气网首页,在搜索框中搜索北京,查看北京地区的天气,如下图所示:

这里写图片描述


发现在今天的数据栏中并没有我要的最低温度和最高温度,于是又选择了“7天”链接,截图如下:

这里写图片描述


这时候我想要的数据(最低温度、最高温度)就有了,接下来就该分析网页的请求过程了。通过对比分析“今天”页面和“7天”页面发现,该网站的请求都是简单的GET的请求。
以请求“7天”页面为例,请求的URL如下:

URL=“ http://www.weather.com.cn/weather/101010100.shtml

其中,“weather”代表请求的是“7天”,如果是请求“今天”则是“weather1d“;后面的“101010100”则代表了北京地区的编号。


既然URL已经搞清楚了,那么就下来就要分析网页源码,找到数据在源码中呈现位置,经过一番寻找,已经定位数据在源码中的位置,其中天气数据和温度数据在两个p标签中,而最高温度数据在span标签中,最低温度在i标签中。

这里写图片描述


但是这边需要注意的一个问题是,到了晚上时间,这里会有一个变化,那就是没有了最高温度,在网页界面呈现的结果为:

这里写图片描述


在代码中的呈现结果即为少了一个span标签,只剩下包含最低温度数据的i标签。由于我在数据的应用场景中必须有最高温度,故为了避免读取不到最高温度,我采取的方法是直接利用第二天的最高温度来代替(虽然比较粗暴)。

这里写图片描述


到此,网页的分析工作就结束了,那么接下来的工作就是获取数据。

第二步 数据获取

鉴于Python语言的优雅,本次简易爬虫故选用Python+Beautiful Soup 4进行页面解析。Beauti Soup是一个可以从HTML或XML文件中提取数据的Python库,其强大的解析功能,能够方便快捷的解决很多问题。关于BeautiSoup的相关介绍,大家可以参考官方文档或是其他文件,这里就直接贴出我的代码.

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re

resp=urlopen('http://www.weather.com.cn/weather/101010100.shtml')
soup=BeautifulSoup(resp,'html.parser')
tagToday=soup.find('p',class_="tem")  #第一个包含class="tem"的p标签即为存放今天天气数据的标签
try:
    temperatureHigh=tagToday.span.string  #有时候这个最高温度是不显示的,此时利用第二天的最高温度代替。
except AttributeError as e:
    temperatureHigh=tagToday.find_next('p',class_="tem").span.string  #获取第二天的最高温度代替

temperatureLow=tagToday.i.string  #获取最低温度
weather=soup.find('p',class_="wea").string #获取天气

print('最低温度:' + temperatureLow)
print('最高温度:' + temperatureHigh)
print('天气:' + weather)



程序运行结果如下:

这里写图片描述

  • 14
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,您想了解如何用 Python 爬取历史天气数据,是吗? 首先,需要确定您想要爬取哪个地区的历史天气数据。一般来说,可以通过查询该地区的气象局或气象站获取历史天气数据。 接着,可以使用 Python 中的 requests 库来发送 HTTP 请求,获取页源代码。然后,可以使用 BeautifulSoup 库来解析页源代码,提取出所需的天气数据。 以下是一个简单的示例代码,用于爬取中国天气上北京市 2019 年 1 月份的历史天气数据: ``` python import requests from bs4 import BeautifulSoup url = 'http://www.weather.com.cn/weather/101010100.shtml#dt' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} r = requests.get(url, headers=headers) r.encoding = 'utf-8' soup = BeautifulSoup(r.text, 'html.parser') weather_list = soup.select('.t li') for weather in weather_list: date = weather.select('.time')[0].text weather_detail = weather.select('.temp')[0].text.strip() print(date, weather_detail) ``` 以上代码中,我们首先通过 requests 库发送了一个 GET 请求,获取了北京市天气页源代码。然后,使用 BeautifulSoup 库解析页源代码,提取出了 2019 年 1 月份的天气数据,并打印输出了日期和天气详情。 需要注意的是,不同的页结构不同,需要根据具体情况修改代码。同时,需要注意站的 robots.txt 文件,不要过度访问站,以免被封 IP 或其他限制。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值