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


前言

🚤想获取近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休眠

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狮子座的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值