Xpath爬取天气预报

# 爬取往年天气信息

import requests
from lxml import etree
from pypinyin import lazy_pinyin # 将中文转换为拼音
from datetime import datetime
import csv,time

# 写入信息
f = open(f"{str(int(time.time()))}.csv","w",newline="",encoding="utf-8")
write = csv.DictWriter(f,['日期','最高温度','最低温度','天气状况','风向以及风级'])
write.writeheader()

place = input("请输入要查找的城市地点:")
place = "".join(lazy_pinyin(place)) # 将地点转换相应的拼音
year = int(input("请输入要查找的年份:"))
while True:
    if  year > datetime.now().year or year < 2011:
        print("输入的年份范围有误")
        year = int(input("请输入要查找的年份:"))
    else:
        break
month = int(input("请输入要查找的月份:"))
while True:
    if month > datetime.now().month:
        print("输入的月份范围有误")
        month = int(input("请输入要查找的月份:"))
    else:
        if month <10:
            month ="0" + str(month)
        break

url = f"https://lishi.tianqi.com/{place}/{str(year)+str(month)}.html"
# url = "https://lishi.tianqi.com/shanghai/202405.html"
# print(url)
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}

response = requests.get(url=url,headers = headers)
tree = etree.HTML(response.text)

lis = tree.xpath('/html/body/div[7]/div[1]/div[4]/ul/li')
print(len(lis)) # 总共有多少天
datas = []
for i in range(1,len(lis)+1):
    dic = {}
    result = tree.xpath(f'/html/body/div[7]/div[1]/div[4]/ul/li[{i}]/div/text()')
    dic["日期"] = result[0]
    dic["最高温度"] = result[1]
    dic["最低温度"] = result[2]
    dic["天气状况"] = result[3]
    dic["风向以及风级"] = result[4]
    datas.append(dic)
    write.writerow(dic)
print(datas)
# /html/body/div[7]/div[1]/div[4]/ul/li[1]
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值