利用python爬虫爬取天气史天气(xpath解析)(源码)

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}")
  1. 导入必要的库

    • requests:用于发送HTTP请求获取网页内容。
    • lxml.etree:用于解析HTML文档。
    • xpinyin.Pinyin:用于将中文城市名转换为拼音。
  2. 输入城市名

    • 用户输入一个城市名,例如 “北京”。
  3. 转换城市名为拼音

    • 使用 xpinyin 库将中文城市名转换为拼音格式,并去掉可能的连字符。
  4. 构建请求URL

    • 根据拼音格式的城市名构建天气查询网站的URL。
  5. 发送HTTP请求

    • 使用 requests.get() 发送带有自定义用户代理的HTTP请求,获取网页内容。
  6. 解析HTML内容

    • 使用 lxml.etree.HTML 解析返回的HTML页面。
  7. 提取天气信息

    • 使用XPath表达式从HTML中提取城市名称、日期、室外温度、体感温度、天气情况、全天气温、每日的具体天气数据、空气质量相关数据、健康影响、建议措施、天气简报和明日预报等信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值