python爬取天气信息,可视化到桌面

过程分析:

先是去到天气网数据分析---爬取有关天气预报数据------re正则提取出来---做可视化处理---图片上写文字---保存图片---更换壁纸(到这里把天气放在屏幕桌面上就完成了)---到公网ip地址查询网站---数据分析公网ip地址---爬取公网ip地址可用数据---加入到地址中(这里根据公网ip地址更换天气数据也完成了)---下载多个壁纸---把名字放在列表里(我懒就直接用的数字)---随机数挑选壁纸---加入代码(这里就做完了)

其实省略了很多,我也搜索了很多资料,毕竟自己做的就要吹一吹牛

想法来源:

朋友想做公众号天气推送,可是天气模块有点问题,就问我能不能爬下来给他重新运行

我想这是男人不能说自己不行就答应了下来,经过一个小时的努力,也是成功拿下

发给他的时候,他说不会用找了一个大佬给他重新写了,我的代码最后也没用上

我抱着不浪费的原则就想把这放在桌面上看这,我是个python新手不是什么都很懂

到网上搜索了文字输出到桌面就发现了https://blog.csdn.net/u011463832/article/details/107856912

也是灵感来源了,到后来我也不满足于一个地方就搜索公网ip地址查询

做到走到哪天气就跟到哪,我也是个高中生没时间去外面逛还没有测试过

不过我在家还是能运行的

有bug请反馈

记得更换图片路径

献上代码:

分辨率的不同,字出现的地方也会不一样我的分辨率是2560.5 × 1440

不好意思之前的re没弄好出了bug,风速只能取俩字,今天刮东北风就卡bug了,已修改

更新了功能,错误可设置自动结束运行删除文字,随机不会连续两个一样的壁纸。

import cv2
from PIL import ImageFont, ImageDraw, Image
import numpy as np
import time
import requests as req
import re
import ctypes
import random

ip = req.get('https://checkip.amazonaws.com').text.strip()
dat={
    'ip':ip,
    'action':'2'
}
head={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70',
      'Cookie': 'ASPSESSIONIDCSDRSDQS=JPJFNBOCACAJEKJHELJFKECN',
      'Content-Length': '17199'
      }
ur='https://www.ip138.com/iplookup.asp?'
a=req.post(url=ur,data=dat,headers=head)
a.encoding='936'
b=a.text
b1=re.findall('\"ASN归属地\":\"[^ ]+',b)[0]
b2=re.findall('[^\"ASN归属地\":\"]+',b1)[0]
b3=re.sub('[省市县]',' ',b2)
b4=b3.split()
cazao=b4[-1]
url='https://j.i8tq.com/weather2020/search/city.js'
user={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70'}
a=req.get(url,headers=user).text
# cazao=input('请输入地址:')
c='\"%s": ?\{\W+AREAID\": ?\"(\d+)\"'%cazao
b=re.findall(c,a)[0]
url1='http://d1.weather.com.cn/sk_2d/%s.html?_=1661901621817'%b
data={
    'Cookie': 'f_city=%E5%90%88%E8%82%A5%7C101220101%7C',
    'Referer': 'http://www.weather.com.cn/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70'
      }
cs=1
js='yes'
kqzdsc=1#等于1时,错误结束运行并且删除文字
butong=0
while True:
    try:
        a1=req.get(url1,headers=data)
        a1.encoding='utf-8'
        b1=a1.text
        zg=req.get(url='http://www.weather.com.cn/weather1d/%s.shtml'%b,headers=user)
        zg.encoding='utf-8'
        zg1=zg.text
        dizhi=re.findall(cazao,b1)[0]
        gdwen=re.findall('value=\".+(\d\d\D\d+°C)\"',zg1)[0]
        xzwendu=re.findall('temp\"\D+(\d+)',b1)[0]
        fengshu=re.findall('WD\"\D\"([^\"]+)\"',b1)[0]
        fengji=re.findall('WS\"\D+([^\"]+)\"',b1)[0]
        shidu=re.findall('SD\"\D+([^\"]+)\"',b1)[0]
        tianqi=re.findall('weather\":\"([^\"]+)\"',b1)[0]
        xiqi=re.findall('\"date\":\"(.+)\"',b1)[0]
        shijian=re.findall('time\":\"([^\"]+)\"',b1)[0]
        a=['地点:'+str(dizhi)+' '+str(xiqi),'刷新时间为:'+str(shijian),'现在温度为:'+str(xzwendu)+'°C','高低温:'+str(gdwen),'风速:'+str(fengshu),'风级:'+str(fengji),'湿度:%s'%shidu,'天气:%s'%tianqi]
        bzmc=str(random.randint(1,9))#随机数更换壁纸(有几张改最大到几张,也可加入列表在下横输list[bzmc],不过要把str删除)
        while bzmc==butong:
            bzmc = str(random.randint(1, 9))
        bk_img = cv2.imread(bzmc+".png") # 背景图(图片名称.后缀)
        zhiti = ImageFont.truetype("font/simsun.ttc", 50) # 字体和大小
        pil = Image.fromarray(bk_img) #PiL
        draw = ImageDraw.Draw(pil)
        y=420  #在桌面的位置
        for i in range(0,len(a)):
            draw.text((10, y),str(a[i]), font = zhiti, fill = (255, 255, 255))  #(10,y)在电脑上的位置
            bk_img = np.array(pil)
            y+=50  #下一行的距离
        txm='aaa.png'#新图片名称
        cv2.waitKey()
        cv2.imwrite(txm,bk_img)  # OpenCV输出图像
        dz='C:\火绒\python\pythonProject\作业\python\爬虫学习\壁纸更换刷新\%s'%txm #壁纸的路径!!!
        ctypes.windll.user32.SystemParametersInfoW(20, 0, dz, 0)#设置为壁纸
        print('第%s次'%cs)#循环次数
        cs+=1
        butong=bzmc
        time.sleep(1*60)#循环时间
    except:
        print('错误')
        if kqzdsc==1:
            if js == 'yes':
                jsdz = 'C:\火绒\python\pythonProject\作业\python\爬虫学习\壁纸更换刷新\\%s' % bzmc + '.png'
                ctypes.windll.user32.SystemParametersInfoW(20, 0, jsdz, 0)
                print('已开启错误结束循环,已自动删除文字')
                break
        print('如果模块和网络都没问题的话,可能是图片路径导致的')
        time.sleep(10)
 

没长用过自定义函数就凑活看吧,我设定的时间为每1分钟爬取一次,网络卡的时候可能在换壁纸的时候黑屏一下,如果是一直黑屏就是没运行成功

 

记得加入图片时要把名称搞好,还有分辨率的大小会影响文字的位置,要自行修改下面这段代码一定要同步图片分辨率
draw.text((10, y))

 

 

使用效果:

点击停止运行会错误自动删除文字:

358b9d84f05a47a7843c201af33317e3.jpeg

 

15ea21d6efa04fd5884a5fab917a9c30.jpeg

 

 随机数更换壁纸也能用,random可能有点寒酸:

e50392c406994ce6bbf165f99c9354d0.jpeg

 858ee8122ac5469aac302e19e86b41b6.jpeg

 

 911155be28134a259fc2ae21e893ad71.jpeg

 几乎不会有错误除非特别卡的时候,原因也是爬虫卡的都没网连接网址

如果地址不对,可直接改b2变量来改地点,可直接输名字

e71358c3e8ca4c7591dc2965374b29fc.jpeg

 如果分辨率和我一样,一般还是能直接运行的,ip错的几率不大

81d43934b8ac464483c2eb7a2d0c6026.jpeg

 那就到这有,bug可私信,别的想法可评论,不定时看

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值