Pythpon 爬取中国天气网数据

以前看别人用python写爬取数据的程序感觉特牛掰,今天在网上找到了一个例子参考了下,自己也写了一个。之后会结合微信机器人,然后每隔一段时间给自己和好友发送天气情况。

 

一、requests模块从网站获取数据

 

想要爬取天气的第一步是使用python的requests模块获取网页数据。

requests模块手册:http://2.python-requests.org/zh_CN/latest/user/quickstart.html

import requests	
import random	

	
url = 'http://www.weather.com.cn/weather/101100701.shtml'  #数据地址	
header = {	
    'Accept':       'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',	
    'Accept-Encoding': 'gzip, deflate, sdch',	
    'Accept-Language': 'zh-CN,zh;q=0.8',	
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3226.400 QQBrowser/9.6.11681.400'	
}	

	
#timeout = random.choice(range(80, 180))  #超时时间	
#req = requests.get(url, headers=header, timeout=timeout) 	
req = requests.get(url) 	
req.encoding = 'utf-8'                   #防止中文乱码	
code = req.status_code                  #返回状态,200代表ok	
#print(code)

中国天气网的数据比较简单,可以不用传header ;再简单一些,超时数据也不传,只传入一个url地址。

这时我们获得了想要的数据,可以用 print(req.text)查看获取的数据结果。

如果requests.get()得到的是一个json数据,也可以使用req.json来解析数据。

二、使用 bs4 的 BeautifulSoup 类解析数据

 

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你习惯的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.

soup = BeautifulSoup(req.text, 'html.parser')	

	
ul_tag = soup.find('ul', 't clearfix')  	
print(ul_tag) 	

	

	
li_tag = ul_tag.findAll('li')          #获取每一天数据	
for tag in li_tag:	
    print(tag.find('h1').string)     #时间	
    print(tag.find('p', 'wea').string) #天气	
# 温度的tag数据格式不统一	
    try: 	
        print(tag.find('p', 'tem').find('span').string)  #高温	
        print(tag.find('p', 'tem').find('i').string)     #低温	
    except:	
        print('null')	
        pass	
    print(tag.find('p', 'win').find('i').string)         #风力	
print("-------------------------------------")

程序说明:

html.parser  :Python的内置标准库、执行速度适中、文档容错能力强。其他解析器可参考:https://beautifulsoup.readthedocs.io/zh_CN/latest/

从网页程序可以知道 <ul class="t clearfix"> 标签下记录了一周的天气数据,因此只需要解析该标签即可

部分网页程序如下:

&lt;ul class="t clearfix"&gt;	
&lt;li class="sky skyid lv3 on"&gt;	
&lt;h1&gt;26日(今天)&lt;/h1&gt;	
&lt;big class="png40"&gt;&lt;/big&gt;	
&lt;big class="png40 n07"&gt;&lt;/big&gt;	
&lt;p title="小雨" class="wea"&gt;小雨&lt;/p&gt;	
&lt;p class="tem"&gt;	
&lt;i&gt;20℃&lt;/i&gt;	
&lt;/p&gt;	
&lt;p class="win"&gt;	
&lt;em&gt;	
&lt;span title="东北风" class="NE"&gt;&lt;/span&gt;	
&lt;/em&gt;	
&lt;i&gt;&lt;3级&lt;/i&gt;	
&lt;/p&gt;	
&lt;div class="slid"&gt;&lt;/div&gt;	
&lt;/li&gt;	
&lt;li class="sky skyid lv2"&gt;	
&lt;h1&gt;27日(明天)&lt;/h1&gt;	
&lt;big class="png40 d01"&gt;&lt;/big&gt;	
&lt;big class="png40 n02"&gt;&lt;/big&gt;	
&lt;p title="多云转阴" class="wea"&gt;多云转阴&lt;/p&gt;	
&lt;p class="tem"&gt;	
&lt;span&gt;32℃&lt;/span&gt;/&lt;i&gt;17℃&lt;/i&gt;	
&lt;/p&gt;	
&lt;p class="win"&gt;	
&lt;em&gt;	
&lt;span title="西南风" class="SW"&gt;&lt;/span&gt;	
&lt;span title="西北风" class="NW"&gt;&lt;/span&gt;	
&lt;/em&gt;	
&lt;i&gt;&lt;3级&lt;/i&gt;	
&lt;/p&gt;	
&lt;div class="slid"&gt;&lt;/div&gt;	
&lt;/li&gt;

程序比较简单,如果需要对python对应模块的深入了解可参考对应文档。下次和大家分享使用wechat_sender模块将天气信息发给微信好友。最终会把这些做成一个小项目,否则知识点还是很碎片化。

欢迎大家关注公众号:

640?wx_fmt=png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值