Python网络爬虫:爬取天气预报 将数据保存到文本文件中

174 阅读2分钟

本人已参与【新人创作礼】活动,一起开启掘金创作之路。 本文首发于CSDN hello,大家好,我是wangzirui32,今天我们来学习如何爬取天气预报,并将数据保存到文本文件中,开始学习吧!

1. 解析网页

首先,来到www.tianqi.com/,搜索一个城市,如图:
网页
图中红框内的数据基本就是我们的爬取目标,这里我直接放出浏览器复制的XPath路径:

# 目前气温
/html/body/div[5]/div/div[1]/dl/dd[3]/p/b/text()
# 湿度
/html/body/div[5]/div/div[1]/dl/dd[4]/b[1]/text()
# 风向
/html/body/div[5]/div/div[1]/dl/dd[4]/b[2]/text()
# 紫外线强度
/html/body/div[5]/div/div[1]/dl/dd[4]/b[3]/text()
# 今日气温
/html/body/div[5]/div/div[1]/dl/dd[3]/span/text()
# 空气质量
/html/body/div[5]/div/div[1]/dl/dd[5]/h5/text()

2. 编写代码

import requests
from lxml import etree

city = input("请输入你需要查询的城市:")

url = "https://www.tianqi.com/{}".format(city)

# 请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62"
}

# 网页请求
html = requests.get(url, headers=headers).text
parse_html = etree.HTML(html)

# 获取上述信息
now_temperature = parse_html.xpath("/html/body/div[5]/div/div[1]/dl/dd[3]/p/b/text()")[0]
humidity = parse_html.xpath("/html/body/div[5]/div/div[1]/dl/dd[4]/b[1]/text()")[0].replace("湿度:", "")
wind_direction = parse_html.xpath("/html/body/div[5]/div/div[1]/dl/dd[4]/b[2]/text()")[0].replace("风向:", "")
UV_intensity = parse_html.xpath("/html/body/div[5]/div/div[1]/dl/dd[4]/b[3]/text()")[0].replace("紫外线:", "")
today_temperature = parse_html.xpath("/html/body/div[5]/div/div[1]/dl/dd[3]/span/text()")[0]
air_quality = parse_html.xpath("/html/body/div[5]/div/div[1]/dl/dd[5]/h5/text()")[0].replace("空气质量:", "")

# 写入文件
with open("weather.txt", "w", encoding="utf-8") as f:
    write_content = "当前温度:" + now_temperature + "℃" +\
                    "\n湿度:" + humidity +\
                    "\n风向:" + wind_direction +\
                    "\n紫外线:" + UV_intensity +\
                    "\n今日温度:" + today_temperature +\
                    "\n空气质量:" + air_quality
    f.write(write_content)

运行代码,输入一个城市,打开weather.txt,可以看到:

当前温度:34℃
湿度:54%
风向:南风 2级
紫外线:弱
今日温度:23 ~ 34℃
空气质量:优

好了,今天的课程就到这里,我是wangzirui32,喜欢的可以点个收藏和关注,我们下次再见!