热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python爬虫——爬取上海15天天气高低温度

文章目录前言一、基本目标二、使用步骤1.进行分析2.整体代码结果总结前言🚤想获取近15天上海天气数据,并绘制成折线图,用爬虫的xpat

文章目录

  • 前言
  • 一、基本目标
  • 二、使用步骤
    • 1.进行分析
    • 2.整体代码
  • 结果
  • 总结




前言

🚤想获取近15天上海天气数据,并绘制成折线图,用爬虫的xpathre来解决数据获取的需求,pylab来解决绘制折线图的需求。


⚠️提示:爬虫不可用作违法活动,爬取时要设定休眠时间,不可过度爬取,造成服务器宕机,需付法律责任!!!

一、基本目标

🚣目标是获取上海这个城市15天内的天气高低温数据,并绘制成折线图

在这里插入图片描述

二、使用步骤

1.进行分析

⚓️数据采用服务器渲染模式,天气温度数据直接在html页面中包裹,可以利用xpath或者re进行定位获取数据。
但是7天内和8-15天数据两个不同的页面,所以需要爬取两次数据

2.整体代码

import requests
from lxml import etree
from pylab import * # 支持中文# 设置爬取网站url
base_url = "http://www.weather.com.cn/weather/101020100.shtml"
# requests进行爬取代码
resp = requests.get(url=base_url)# XPATH解析
html = etree.HTML(resp.text)
# 拿到天气的li,在li里包含每天天气的全部数据,包括日期/天气/气温/城市等等
lis = html.xpath('//*[@id="7d"]/ul/li')
# 创建日期、最高气温、最低气温的数组,为了后续把爬取的数据添加到数组中,进而进一步把数组用plot进行绘制折线图
days = []
lows = []
highs = []
# 对7天天气的li进行遍历,为了获取高低温度和日期
for li in lis:print("正在爬取近7天···")# 获取7天高温high = li.xpath("./p[2]/span/text()")[0]# 获取7天低温low = li.xpath("./p[2]/i/text()")[0][0:2]# 获取7天日期day = li.xpath("./h1/text()")[0][0:2]# 把7天日期、高温、低温添加到数组中days.append(day)lows.append((int)(low))highs.append((int)(high))# 设置休眠1秒time.sleep(1)# 设置8-15天的url
base_url = "http://www.weather.com.cn/weather15d/101020100.shtml"
# requests进行爬取8-15天页面代码
resp = requests.get(url=base_url)
# 设置编码
resp.encoding = 'utf-8'
# XPATH解析
html = etree.HTML(resp.text)
# 拿到8-15天源码里每天的天气的li
lis = html.xpath('//*[@id="15d"]/ul/li')
# 对8-15天的天气li进行遍历,为了获取高低温度和日期
for li in lis:print("正在爬取近8-15天···")# 获取8-15天高温high = li.xpath("./span[@class='tem']/em/text()")[0][:2]# 获取8-15天低温low = li.xpath("./span[@class='tem']/text()")[0][1:3]# 获取8-15天日期day = li.xpath("./span[@class='time']/text()")[0][3:5]# 把8-15天日期、高温、低温添加到数组中days.append(day)lows.append((int)(low))highs.append((int)(high))# 设置休眠1秒time.sleep(1)# 爬取15日的日期、高低气温结束
# 打印15日各项信息
print("日期列表如下:")
print(days)
print("最低气温列表如下:")
print(lows)
print("最高气温列表如下:")
print(highs)# 下方代码绘制高低气温折线图图表
# 设置字体
mpl.rcParams['font.sans-serif'] = ['SimHei']
# 设置x轴长度
x = range(len(days))
# 限定纵轴的范围
plt.ylim(0, 40)
# 低温、高温数据加载,设置图形表示,设置解释
plt.plot(x, lows, marker='o', mec='r', mfc='w', label=u'最低气温')
plt.plot(x, highs, marker='*', ms=10, label=u'最高气温')
# 让图例生效
plt.legend()
plt.xticks(x, days, rotation=45)
plt.margins(0)
plt.subplots_adjust(bottom=0.15)
# X轴标签
plt.xlabel(u"日期")
# Y轴标签
plt.ylabel("温度")
# 标题
plt.title("近15日气温")
# 图例显示
plt.show()



结果

🚔程序运行的输出如下

在这里插入图片描述

🚒输出的折线图如下

在这里插入图片描述



总结

爬虫的基本步骤:
1.检查有没有反爬,设置常规反反爬,User-Agentreferer都是最常见的反爬手段
2.利用xpathre技术进行定位,定位后获取想到的数据即可
3.利用file文件操作写入到文本中
4.注意设置time休眠


推荐阅读
author-avatar
寄到家的_259
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有