import requests
from lxml import etree
from xpinyin import Pinyin
p = Pinyin()
c=input("输入查询的城市:")
result1 = p.get_pinyin(c)
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]
preweek=tree.xpath('//div[@class="jdjianjie"]//p')[1]
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}")
print(f"【明日预报】{preweek.text}")
-
导入必要的库:
requests
:用于发送HTTP请求获取网页内容。lxml.etree
:用于解析HTML文档。xpinyin.Pinyin
:用于将中文城市名转换为拼音。
-
输入城市名:
- 用户输入一个城市名,例如 “北京”。
-
转换城市名为拼音:
- 使用
xpinyin
库将中文城市名转换为拼音格式,并去掉可能的连字符。
- 使用
-
构建请求URL:
- 根据拼音格式的城市名构建天气查询网站的URL。
-
发送HTTP请求:
- 使用
requests.get()
发送带有自定义用户代理的HTTP请求,获取网页内容。
- 使用
-
解析HTML内容:
- 使用
lxml.etree.HTML
解析返回的HTML页面。
- 使用
-
提取天气信息:
- 使用XPath表达式从HTML中提取城市名称、日期、室外温度、体感温度、天气情况、全天气温、每日的具体天气数据、空气质量相关数据、健康影响、建议措施、天气简报和明日预报等信息。