本人以从csdn转入博客
过程分析:
先是去到天气网数据分析---爬取有关天气预报数据------re正则提取出来---做可视化处理---图片上写文字---保存图片---更换壁纸(到这里把天气放在屏幕桌面上就完成了)---到公网ip地址查询网站---数据分析公网ip地址---爬取公网ip地址可用数据---加入到地址中(这里根据公网ip地址更换天气数据也完成了)---下载多个壁纸---把名字放在列表里(我懒就直接用的数字)---随机数挑选壁纸---加入代码(这里就做完了)
其实省略了很多,我也搜索了很多资料,毕竟自己做的就要吹一吹牛
想法来源:
朋友想做公众号天气推送,可是天气模块有点问题,就问我能不能爬下来给他重新运行
我想这是男人不能说自己不行就答应了下来,经过一个小时的努力,也是成功拿下
发给他的时候,他说不会用找了一个大佬给他重新写了,我的代码最后也没用上
我抱着不浪费的原则就想把这放在桌面上看这,我是个python新手不是什么都很懂
到网上搜索了文字输出到桌面就发现了
也是灵感来源了,到后来我也不满足于一个地方就搜索公网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))
使用效果:
点击停止运行会错误自动删除文字:
编辑
编辑
随机数更换壁纸也能用,random可能有点寒酸:
编辑
编辑
编辑
几乎不会有错误除非特别卡的时候,原因也是爬虫卡的都没网连接网址
如果地址不对,可直接改b2变量来改地点,可直接输名字
编辑
如果分辨率和我一样,一般还是能直接运行的,ip错的几率不大
编辑
那就到这有,bug可私信,别的想法可评论,不定时看