Python爬虫实战(基础篇)—9获取某个城市天气(附完整代码)

news2024/11/16 17:55:08

文章目录

  • 专栏导读
  • 背景
  • 1、网址(请求URL)
  • 2、查看请求方法、参数
  • 3、请求初步测试
    • 代码
    • 请求成功
  • 4、数据清洗(lxml+xpath)
    • 【城市实时天气】+【日期】lxml+xpath 代码
    • 【室外温度】+【体感温度】lxml+xpath 代码
    • 【天晴情况】+【全天气温】lxml+xpath 代码
    • 【气压值】【降水量】【风力情况】【风速大小】【能见度】【相对湿度】【日出时间】【日落时间】【月升时间】【日落时间】lxml+xpath 代码
    • 【空气质量】【健康影响】【建议措施】lxml+xpath 代码
    • 天气简报 lxml+xpath 代码
  • 5、不同城市测试
    • 汉字转拼音
    • 汉字转拼音代码测试
    • 不同城市测试
    • 成功!
  • 6、完整代码
  • 总结

专栏导读

🔥🔥本文已收录于《Python基础篇爬虫》

🉑🉑本专栏专门针对于有爬虫基础准备的一套基础教学,轻松掌握Python爬虫,欢迎各位同学订阅,专栏订阅地址:点我直达

🤞🤞此外如果您已工作,如需利用Python解决办公中常见的问题,欢迎订阅《Python办公自动化》专栏,订阅地址:点我直达

🔺🔺此外《Python30天从入门到熟练》专栏已上线,欢迎大家订阅,订阅地址:点我直达

背景

  • 由于我有一个习惯就是每天都必须查看每日天气情况,但是我手机是那种老版的小灵通,不像现在的智能手机能够显示每日的天气情况,所以我需要写一个爬虫查看当前城市(或者其他城市)的天气如何,这样我就可以知道每日天气情况,我也不会不开心了!

1、网址(请求URL)

  • 主页:URL:https://www.tianqishi.com/

  • 带城市:URL:https://www.tianqishi.com/

2、查看请求方法、参数

在这里插入图片描述

  • 请求方法:GET

  • 请求参数:无

3、请求初步测试

代码

import requests

url = 'https://www.tianqishi.com/shanghai.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
}

res_data = requests.get(url=url,headers=headers)
print(res_data.text)

请求成功

在这里插入图片描述

4、数据清洗(lxml+xpath)

在这里插入图片描述

  • 将上述的详细信息,进行元素分析,利用 lxml+xpath,进行数据清洗,lxml 没有安装的小伙伴可以安装一下

  • 安装:pip install lxml

【城市实时天气】+【日期】lxml+xpath 代码

  • 【城市实时天气】

    在h3标签里,class属性为:class=“city-title ico”
    【日期】

    在h3标签里,class属性为:class=“city-title ico”里面的span 标签里

在这里插入图片描述

city = tree.xpath('//h3[@class="city-title ico"]')[0].text
date = tree.xpath('//h3[@class="city-title ico"]//span')[0].text

【室外温度】+【体感温度】lxml+xpath 代码

在这里插入图片描述

ot = tree.xpath('//div[@class="ltlTemperature"]//b')[0].text # 室外温度
st = tree.xpath('//div[@class="ltlTemperature"]//span')[0].text # 体感温度

在这里插入图片描述

【天晴情况】+【全天气温】lxml+xpath 代码

在这里插入图片描述

t_type = tree.xpath('(//div[@class="box pcity"])[3]//li//a[@target="_blank"]')[0].text.split(':')[1].split(',')[0]
all_day_t = tree.xpath('(//div[@class="box pcity"])[3]//li//a[@target="_blank"]')[0].text.split(':')[1].split(',')[1]

在这里插入图片描述

【气压值】【降水量】【风力情况】【风速大小】【能见度】【相对湿度】【日出时间】【日落时间】【月升时间】【日落时间】lxml+xpath 代码

在这里插入图片描述

datas = tree.xpath('//ul[@class="mt"]//li')
values = tree.xpath('//ul[@class="mt"]//li//span')
for i in range(len(datas)):
    print(datas[i].text,values[i].text)

在这里插入图片描述
在这里插入图片描述

【空气质量】【健康影响】【建议措施】lxml+xpath 代码

he = tree.xpath('(//div[@class="air-quality pd0"])[1]//font')
suggest = tree.xpath('(//div[@class="air-quality pd0"])[2]//font')

在这里插入图片描述

天气简报 lxml+xpath 代码

tianqijianbao = tree.xpath('//div[@class="jdjianjie"]//p')[0]

在这里插入图片描述

5、不同城市测试

  • 代码到这已经全部完成,我们可以测试一下,其他城市试一试

在这里插入图片描述

  • 我们发现只是将【北京】转换成拼音【beijing】

汉字转拼音

  • Python中文字转拼音可以使用xpinyin,直接使用pip安装即可👇

pip install xpinyin -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

汉字转拼音代码测试

from xpinyin import Pinyin

p = Pinyin()
result1 = p.get_pinyin('北京')
print(result1)

输出结果

bei-jing

把中间的【-】去掉

from xpinyin import Pinyin

p = Pinyin()
result1 = p.get_pinyin('北京')
print(result1.replace('-',''))

输出结果

beijing

不同城市测试

在这里插入图片描述

成功!

在这里插入图片描述

6、完整代码

# -*- coding: UTF-8 -*-
'''
@Project :测试
@File    :main.py
@IDE     :PyCharm
@Author  :一晌小贪欢
@Date    :2023/12/13 13:44
'''



import requests
from lxml import etree
from xpinyin import Pinyin


p = Pinyin()
result1 = p.get_pinyin('北京')
city = result1.replace('-','')


url = f'https://www.tianqishi.com/{city}.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
}

res_data = requests.get(url=url,headers=headers)
# print(res_data.text)
tree = etree.HTML(res_data.text)
city = tree.xpath('//h3[@class="city-title ico"]')[0].text
date = tree.xpath('//h3[@class="city-title ico"]//span')[0].text
ot = tree.xpath('//div[@class="ltlTemperature"]//b')[0].text # 室外温度
st = tree.xpath('//div[@class="ltlTemperature"]//span')[0].text # 体感温度
t_type = tree.xpath('(//div[@class="box pcity"])[3]//li//a[@target="_blank"]')[0].text.split(':')[1].split(',')[0]
all_day_t = tree.xpath('(//div[@class="box pcity"])[3]//li//a[@target="_blank"]')[0].text.split(':')[1].split(',')[1]
datas = tree.xpath('//ul[@class="mt"]//li')
values = tree.xpath('//ul[@class="mt"]//li//span')
air_quality = tree.xpath('//div[@class="air-quality"]//span')
he = tree.xpath('(//div[@class="air-quality pd0"])[1]//font')
suggest = tree.xpath('(//div[@class="air-quality pd0"])[2]//font')
tianqijianbao = tree.xpath('//div[@class="jdjianjie"]//p')[0]

print(f"【城市】{city}\n【日期】{date}\n【室外温度】{ot}\n【体感温度】{st}\n【天气情况】{t_type}\n"
      f"【全天气温】{all_day_t}")
for i in range(len(datas)):
    print(f"【{datas[i].text}{values[i].text}")


print(f'【空气质量】{air_quality[0].text}\n【AQI】{air_quality[1].text}\n【PM2.5】{air_quality[2].text}\n【PM10】{air_quality[3].text}\n'
      f'【CO】{air_quality[4].text}\n【NO2】{air_quality[5].text}\n【O3】{air_quality[6].text}\n【SO2】{air_quality[7].text}')


print(f"【健康影响】{he[0].text}\n【建议措施】{suggest[0].text}")

print(f"【天气简报】{tianqijianbao.text}")


总结

  • 今天的代码和上一节课的代码类似,都是简单的GET请求,并且返回的是html页面,我们利用【lxml】+【xpath】提取数据

  • 这里需要大家对【xpath】稍微了解一下,并且自己会找元素,只要会找元素基本没什么难度

  • 希望大家多多点赞,多多收藏,多多关注

  • 本专栏持续更新中。。。点个关注拜托了!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1309814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ransac 算法的探索和应用

Ransac 算法python 应用和实现 Ransac 算法是一种常用的图像匹配算法,在参数估计领域也经常被使用到。针对估计各种曲线的鲁棒模型参数,效果显著。这里对ransac算法进行某些探索。 python program: import numpy as np import matplotlib.pyplot as p…

UniGui使用CSS移动端按钮标题垂直

unigui移动端中按钮拉窄以后,标题无法垂直居中,是因为标题有一个padding属性,在四周撑开一段距离。会变成这样: 解决方法,用css修改padding,具体做法如下 首先给button的cls创建一个cls,例如 然后添加css&…

python numpy 两种方法将相同shape的一维数组合并为二维数组

1 np.column_stack 最简单的一种方法 将多个一维数据按【列】合并为二维数组 import numpy as np# a b 都是一维数组 a np.array((1,2,3)) b np.array((2,3,4))# 变成二维 merge np.column_stack((a,b)) # array([[1, 2],[2, 3],[3, 4]])2 np.hstack 尽管该函数也是对【列…

桂电|《操作系统》实验一:UNIX/LINUX及其使用环境(实验报告)

桂林电子科技大学2023-2024学年 第 一 学期 操作系统A 实验报告 实验名称 实验一 UNIX/LINUX及其使用环境 实验指导老师: 成绩 院 系 计算机与信息安全学院 专业 计算机科学与技术(卓越工程) 学 号 姓名 课内序…

多表查询、事务、索引

目录 数据准备 分类 内连接 外连接 子查询 事务 四大特性 索引 数据准备 SQL脚本: #建议:创建新的数据库 create database db04; use db04;-- 部门表 create table tb_dept (id int unsigned primary key auto_increment comment 主键…

物流实时数仓:数仓搭建(DWD)一

系列文章目录 物流实时数仓:采集通道搭建 物流实时数仓:数仓搭建 物流实时数仓:数仓搭建(DIM) 物流实时数仓:数仓搭建(DWD)一 文章目录 系列文章目录前言一、文件编写1.目录创建2.b…

leetcode 162. 寻找峰值(优质解法)

代码&#xff1a; class Solution {public int findPeakElement(int[] nums) {int left0,rightnums.length-1;while (left<right){int midleft(right-left)/2;if(nums[mid]>nums[mid1]){rightmid;}else {leftmid1;}}return left;} } 题解&#xff1a; 通过题意进行分析…

CRM是怎样帮助企业从激烈竞争中脱颖而出的?

有限的市场机会与资源推动了市场竞争。市场竞争是在所难免的&#xff0c;但企业可以借助CRM管理系统调整其业务策略&#xff0c;在市场上很多竞争者中突围。CRM系统怎样帮助企业赢得市场竞争&#xff1f; 以下五个功能点是关键&#xff1a;数据分析、客户管理、合作伙伴、营销自…

XCP详解「4.2·问题-加载信号过多导致FIFO buffer overflow」

APE write报问题 报文也提示80 溢出 检查测量配置

【噪音控制 】 铁氧体磁珠

1. 片状铁氧体磁珠的直流重叠特性 片状铁氧体磁珠是一种使用铁氧体的电感器。因此&#xff0c;当大电流通过时&#xff0c;需要特别注意由于磁饱和所造成的性能改变。图1是电流通过片状铁氧体磁珠时的阻抗值的变化示例。 图1 片状铁氧体磁珠的直流重叠特性示例 正因如此&am…

2023一起益企广东省中小企业数字化赋能活动(深圳站)成功举办

12月12日&#xff0c;由广东工业和信息化厅指导&#xff0c;广东省中小企业服务中心、深圳市中小企业服务局主办&#xff0c;深圳联通承办的2023年“一起益企”广东省中小企业数字化赋能专项对接志愿服务活动&#xff08;深圳站&#xff09;在深圳成功举办。 本次活动涵盖中小企…

Failed to open the referenced table ‘qrtz_job_details‘

依赖【表】或者【其他对象】执行拉到最前面即可。

RocketMQ 总体概括

目录 概述RocketMQ 领域模型MQ 解决的问题电商平台案例初步设计引入中间件设计 MQ 选型结束 概述 官网地址 RocketMQ 领域模型 官方领域模型概述 下面图&#xff0c;是在自己理解的基础上&#xff0c;对官方的模型图添加了一些。 Topic&#xff1a;主题&#xff0c;可以理解…

用栈解决迷宫问题

思想 使用栈来解决迷宫问题的思想是通过深度优先搜索算法来探索迷宫中的路径。栈的特点是后进先出&#xff0c;这正好符合深度优先搜索的思想&#xff0c;即先探索一个方向直到无法继续为止&#xff0c;然后回溯到上一个节点&#xff0c;再探索其他方向。 具体来说&#xff0…

DC电源模块:为您的电子设备提供稳定可靠的能量

DC电源模块&#xff1a;为您的电子设备提供稳定可靠的能量 BOSHIDA DC电源模块是一种电子设备&#xff0c;用于为其他电子设备提供稳定可靠的直流电能。它通常由一个输入端&#xff0c;一个输出端和一些内部电路组成。输入端通常接收来自交流电源或其他电源的电能&#xff0c;经…

前端走向未来:真相还是焦虑的贩卖?

目录 一、为什么会出现“前端已死”的言论 二、你如何看待“前端已死” 三、前端技术的未来发展趋势 四、前端人&#xff0c;该如何打好这场职位突围战&#xff1f; 我的其他博客 一、为什么会出现“前端已死”的言论 近来&#xff0c;IT圈内流传着“Java 已死、前端已凉”…

冷链托盘四向穿梭车|适用于-18℃~-25℃海格里斯HEGERLS冷库型托盘四向车系统

近年来随着物流行业的迅猛发展&#xff0c;托盘式四向穿梭车在电力、食品、医用、冷链等等行业得到了广泛应用&#xff0c;尤其在冷链物流场景中应用较多&#xff0c;目前设备已具备在-20℃至-25℃的环境中运行&#xff0c;尤其是-18℃及以下的冷链系统&#xff0c;采用四向穿梭…

mysql8 windows下修改my.ini配置 this is incompatible with sql_mode=only_full_group_by

1、找到安装路径 show variables like %sql_mode;SHOW VARIABLES LIKE config_file;SHOW VARIABLES LIKE %datadir%;SHOW VARIABLES; 2、修改 sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Android取消深色适配

从Android10&#xff08;API 29&#xff09;开始&#xff0c;在原有的主题适配的基础上&#xff0c;Google开始提供了Force Dark机制&#xff0c;在系统底层直接对颜色和图片进行转换处理&#xff0c;原生支持深色模式。当系统设置深色主题背景或者进入省电模式情况下会进入深色…

cgteamwork与shotgrid对比

最近有项目接触使用并二开cgteamwork&#xff0c; 也重新认识了cgteamwork&#xff0c;感受到国产软件的强大&#xff0c;国内中小CG公司的首选&#xff0c;原因&#xff1a; 1 上手容易&#xff0c;不会的有售前工程师教&#xff0c;他们全国各地城市到处跑。 感概业务的强大…