• 售前

  • 售后

热门帖子
入门百科

Python爬虫+tkinter界面实现汗青天气查询的思绪详解

[复制链接]
123457281 显示全部楼层 发表于 2021-10-25 20:08:25 |阅读模式 打印 上一主题 下一主题
本日给各人分享用Python 爬虫+tkinter界面来实现汗彼苍气查询。
一、实现结果

运行结果
运行结果如下:

二、根本思绪

导入用到的库
  1. import requests
  2. from lxml import etree
  3. import re
  4. import tkinter as tk
  5. from PIL import Image, ImageTk
  6. from xpinyin import Pinyin
复制代码
1. 爬虫部分
目标url:https://lishi.tianqi.com/
该网站提供了天下34个省、市所属的2290个地区的汗彼苍气预报查询,数据泉源于城市当天的天气信息,可以查询到汗彼苍气气温,汗青风向,汗青风力等汗彼苍气状态。

分析网页可以发现,某个地区、某个月的全部天气数据的url为:https://lishi.tianqi.com/ + 地区名字的拼音 + '/' + 年代.html。根据用户输入的地区和时间,进行字符串的处理惩罚,构造出url,用于request哀求有该月全部天气信息的页面,获取响应后Xpath定位提取用户输入的要查询的日期的天气信息,查询结果表现在tkinter界面。
爬虫代码如下:
  1. def spider():
  2. headers = {
  3.   'user-agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24',
  4.   "referer": "https://lishi.tianqi.com/chengdu/index.html"
  5. }
  6. p = Pinyin()
  7. place = ''.join(p.get_pinyin(b1.get()).split('-'))   # 获取地区文本框的输入 变为拼音
  8. # 处理用户输入的时间
  9. # 规定三种格式都可以 2018/10/1 2018年10月1日 2018-10-1
  10. date = b2.get() # 获取时间文本框的输入
  11. if '/' in date:
  12.   tm_list = date.split('/')
  13. elif '-' in date:
  14.   tm_list = date.split('-')
  15. else:
  16.   tm_list = re.findall(r'\d+', date)
  17. if int(tm_list[1]) < 10:  # 1-9月 前面加 0
  18.   tm_list[1] = f'0{tm_list[1]}'
  19. # 分析网页发现规律 构造url
  20. # 直接访问有该月所有天气信息的页面 提高查询效率
  21. url = f"https://lishi.tianqi.com/{place}/{''.join(tm_list[:2])}.html"
  22. resp = requests.get(url, headers=headers)
  23. html = etree.HTML(resp.text)
  24. # xpath定位提取该日天气信息
  25. info = html.xpath(f'//ul[@class="thrui"]/li[{int(tm_list[2])}]/div/text()')
  26. # 输出信息格式化一下
  27. info1 = ['日期:', '最高气温:', '最低气温:', '天气:', '风向:']
  28. datas = [i + j for i, j in zip(info1, info)]
  29. info = '\n'.join(datas)
  30. t.insert('insert', '  查询结果如下  \n\n')
  31. t.insert('insert', info)
  32. print(info)
复制代码
2. tkinter界面
代码如下:
  1. def get_image(file_nam, width, height):
  2. im = Image.open(file_nam).resize((width, height))
  3. return ImageTk.PhotoImage(im)
  4. win = tk.Tk()
  5. # 设置窗口title和大小
  6. win.title('全国各地历史天气查询系统')
  7. win.geometry('500x500')
  8. # 画布 设置背景图片
  9. canvas = tk.Canvas(win, height=500, width=500)
  10. im_root = get_image('test.jpg', width=500, height=500)
  11. canvas.create_image(250, 250, image=im_root)
  12. canvas.pack()
  13. # 单行文本
  14. L1 = tk.Label(win, bg='yellow', text="地区:", font=("SimHei", 12))
  15. L2 = tk.Label(win, bg='yellow', text="时间:", font=("SimHei", 12))
  16. L1.place(x=85, y=100)
  17. L2.place(x=85, y=150)
  18. # 单行文本框 可采集键盘输入
  19. b1 = tk.Entry(win, font=("SimHei", 12), show=None, width=35)
  20. b2 = tk.Entry(win, font=("SimHei", 12), show=None, width=35)
  21. b1.place(x=140, y=100)
  22. b2.place(x=140, y=150)
  23. # 设置查询按钮 点击 调用爬虫函数实现查询
  24. a = tk.Button(win, bg='red', text="查询", width=25, height=2, command=spider)
  25. a.place(x=160, y=200)
  26. # 设置多行文本框 宽 高 文本框中字体 选中文字时文字的颜色
  27. t = tk.Text(win, width=30, height=8, font=("SimHei", 18), selectforeground='red') # 显示多行文本
  28. t.place(x=70, y=280)
  29. # 进入消息循环
  30. win.mainloop()
复制代码
tkinter界面结果如下:

结语
以上就是这篇文章的全部内容了,盼望本文的内容对各人的学习大概工作具有肯定的参考学习价值,谢谢各人对小编的支持。
得到 本文完备代码
链接: https://pan.baidu.com/s/1ZCSRIqoOjrxTcLxLYOFiiQ 提取码: wb4f
到此这篇关于Python爬虫+tkinter界面实现汗彼苍气查询的思绪详解的文章就先容到这了,更多相干Python爬虫tkinter界面汗彼苍气查询内容请搜刮草根技术分享以前的文章或继承欣赏下面的相干文章盼望各人以后多多支持草根技术分享!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作