利用网络爬虫爬取中国天气网某个城市近7天的天气【Python】

继上一篇爬取豆瓣电影top250之后,这篇博客还是利用requests库和BeautifulSoup进行网络爬虫的练习,这次爬取的对象是中国天气网。

说明

1.用到的库:requests,BeautifulSoup,re。其中,requests库用于获取网页内容,BeautifulSoup用于网页解析,re正则表达式库用于对爬取内容进行匹配和搜索。
2.正常情况下BeautifulSoup就可以完成网页解析,但是中国天气网现在的风向条目变成了两种风向,是在不知道怎么用BeautifulSoup去解析,只好调用re库把两个风向给检索出来。
3.不同城市有不同城市的代码,可以根据城市的不同替换URL就好;也可以把城市代码也到数据库中,根据输入城市名字找到对应的城市代码后再进行爬取。但是这里只想知道自己城市的天气,因此URL是用西安作为例子写的。

脚本如下

'''
@Author: Guo Yingwei
@Date: 2019-07-09 10:03:55
@E-mail: willgyw@126.com
@Description: crawl weather aroune 7 days of a certain city from China Weather.
'''

import requests
from bs4 import BeautifulSoup
import re

def get_page(url):
    try:
        kv = {'user-agent':'Mozilla/5.0'}
        r = requests.get(url,headers = kv)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return '错误'

def parse_page(html, return_list):
    soup = BeautifulSoup(html, 'html.parser')
    day_list = soup.find('ul', 't clearfix').find_all('li')
    for day in day_list:
        date = day.find('h1').get_text()
        wea = day.find('p',  'wea').get_text()
        if day.find('p', 'tem').find('span'):
                hightem = day.find('p', 'tem').find('span').get_text()
        else:
                hightem = ''
        lowtem = day.find('p', 'tem').find('i').get_text() 
        #win = re.search('(?<= title=").*?(?=")', str(day.find('p','win').find('em'))).group()
        win = re.findall('(?<= title=").*?(?=")', str(day.find('p','win').find('em')))
        wind = '-'.join(win)
        level = day.find('p', 'win').find('i').get_text()
        return_list.append([date, wea, lowtem, hightem, wind, level])
    #return return_list

def print_res(return_list):
    tplt = '{0:<10}\t{1:^10}\t{2:^10}\t{3:{6}^10}\t{4:{6}^10}\t{5:{6}^5}'
    print(tplt.format('日期', '天气', '最低温', '最高温', '风向', '风力',chr(12288)))
    for i in return_list:
        print(tplt.format(i[0], i[1],i[2],i[3],i[4],i[5],chr(12288)))

def main():
    url = 'http://www.weather.com.cn/weather/101110101.shtml'
    html = get_page(url)
    wea_list = []
    parse_page(html, wea_list)
    print_res(wea_list)

if __name__ == '__main__':
    main()

结果如下

爬取结果

网站部分的源代码如下:

<ul class="t clearfix">
<li class="sky skyid lv3 on">
<h1>9日(今天)</h1>
<big class="png40 d02"></big>
<big class="png40 n07"></big>
<p title="阴转小雨" class="wea">阴转小雨</p>
<p class="tem">
<span>26</span>/<i>18℃</i>
</p>
<p class="win">
<em>
<span title="南风" class="S"></span>
<span title="西南风" class="SW"></span>
</em>
<i><3级</i>
</p>
<div class="slid"></div>
</li>
<li class="sky skyid lv1">
<h1>10日(明天)</h1>
<big class="png40 d01"></big>
<big class="png40 n02"></big>
<p title="多云转阴" class="wea">多云转阴</p>
<p class="tem">
<span>27</span>/<i>18℃</i>
</p>
<p class="win">
<em>
<span title="东风" class="E"></span>
<span title="南风" class="S"></span>
</em>
<i><3级</i>
</p>
<div class="slid"></div>
</li>
<li class="sky skyid lv2">
<h1>11日(后天)</h1>
<big class="png40 d02"></big>
<big class="png40 n07"></big>
<p title="阴转小雨" class="wea">阴转小雨</p>
<p class="tem">
<span>31</span>/<i>20℃</i>
</p>
<p class="win">
<em>
<span title="东风" class="E"></span>
<span title="南风" class="S"></span>
</em>
<i><3级</i>
</p>
<div class="slid"></div>
</li>
<li class="sky skyid lv3">
<h1>12日(周五)</h1>
<big class="png40 d01"></big>
<big class="png40 n00"></big>
<p title="多云转晴" class="wea">多云转晴</p>
<p class="tem">
<span>33</span>/<i>21℃</i>
</p>
<p class="win">
<em>
<span title="东风" class="E"></span>
<span title="西南风" class="SW"></span>
</em>
<i><3级</i>
</p>
<div class="slid"></div>
</li>
<li class="sky skyid lv1">
<h1>13日(周六)</h1>
<big class="png40 d02"></big>
<big class="png40 n01"></big>
<p title="阴转多云" class="wea">阴转多云</p>
<p class="tem">
<span>36</span>/<i>21℃</i>
</p>
<p class="win">
<em>
<span title="东风" class="E"></span>
<span title="东南风" class="SE"></span>
</em>
<i><3级</i>
</p>
<div class="slid"></div>
</li>
<li class="sky skyid lv2">
<h1>14日(周日)</h1>
<big class="png40 d02"></big>
<big class="png40 n01"></big>
<p title="阴转多云" class="wea">阴转多云</p>
<p class="tem">
<span>36</span>/<i>21℃</i>
</p>
<p class="win">
<em>
<span title="东风" class="E"></span>
<span title="东南风" class="SE"></span>
</em>
<i><3级</i>
</p>
<div class="slid"></div>
</li>
<li class="sky skyid lv2">
<h1>15日(周一)</h1>
<big class="png40 d01"></big>
<big class="png40 n01"></big>
<p title="多云" class="wea">多云</p>
<p class="tem">
<span>32</span>/<i>21℃</i>
</p>
<p class="win">
<em>
<span title="东风" class="E"></span>
<span title="东南风" class="SE"></span>
</em>
<i><3级</i>
</p>

博主也是刚刚学习简单的定向网络爬虫,去爬一些静态网页作为练习,由于时间和水平有限,如有纰漏,欢迎指正。

  • 18
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
基于Python网络爬虫可以用来爬取天气数据,并且使用可视化分析工具进行数据的可视化分析。首先,我们可以使用Python中的Requests库来发送HTTP请求获取天气数据。可以通过访问天气站的API接口或者直接爬取页内容来获取所需的天气数据。然后,使用Python中的BeautifulSoup库来解析获取到的页内容,提取出需要的数据,如温度、湿度、风速等。 接下来,我们可以使用Python中的Matplotlib库来进行数据的可视化分析。可以绘制折线图来展示某一或某一段时间内的温度变化情况,可以使用条形图来比较不同时间段的温度差异,还可以通过散点图来展示不同时间点的天气指标之间的关系。通过图表的形式,我们可以直观地观察数据的分布和变化趋势,从而更好地理解天气数据。 除了Matplotlib,我们还可以使用Python中的Seaborn库来进行更高级的数据可视化分析。Seaborn可以使数据更加美观地展示,提供了更多的图表类型及样式选择。此外,我们还可以使用Python中的Plotly库来创建交互式的数据可视化图表,方便用户自由探索和分析数据。 总之,基于Python网络爬虫可以爬取天气数据并使用不同的可视化分析工具进行数据的可视化分析。这样的分析可以帮助我们更好地理解和利用天气数据,为天气预报、气候研究等领域提供支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值