我是Python的新手,当我制作一个可以将我的背景更改为每日国家地理图片的程序时,我遇到了一个问题。它可以很好地获取jpeg的路径,但是当我使用命令更改桌面背景(对于Windows)时,它只是将背景更改为纯黑色。代码本身并没有抛出任何错误,它只是没有工作我伤口如何想要它。这是代码。
import urllib2
import ctypes
SPI_SETDESKWALLPAPER = 20
url = urllib2.urlopen("http://photography.nationalgeographic.com/photography/photo-of-the-day/")
code = url.readlines()
pos = code[1303].split("\"",2)
imgurl = pos[1]
print imgurl
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, imgurl , 0)
答案 0 :(得分:2)
您似乎将URL传递给set wallpaper命令,而不是图像的路径。首先获取图像。试试吧。
import urllib2
import ctypes
SPI_SETDESKWALLPAPER = 20
url = urllib2.urlopen("http://photography.nationalgeographic.com/photography/photo-of-the-day/")
code = url.readlines()
pos = code[1303].split("\"",2)
imgurl = pos[1]
print imgurl
# Changes after here
url2 = urllib2.urlopen(imgurl)
out = open("wallpaper.jpg", "wb")
out.write(url2.read())
out.close()
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, "wallpaper.jpg" , 0)
我实际上没有尝试过(没有在Windows上运行)所以也许它可以解决问题而且可能没有!
PS是解析网址的非常脆弱的代码,但是让它运行起来的荣誉!
答案 1 :(得分:0)
用于解析网址的代码确实非常脆弱。你最好使用正则表达式。此正则表达式搜索包含图像的唯一div,然后删除除url之外的所有内容
此外,使用with
打开文件会更好,因为它会自动关闭文件
改进的代码将是:
import urllib2
import ctypes
import re
SPI_SETDESKWALLPAPER = 20
url = urllib2.urlopen("http://photography.nationalgeographic.com/photography/photo-of-the-day/")
code = url.read()
imgurl = re.sub(r'(.|\n)+?<div class="primary_photo">(.|\n)+?<img src="(.+?)"(.|\n)+', r'\3', code)
print imgurl
url2 = urllib2.urlopen(imgurl)
with open("wallpaper.jpg", "wb") as f:
f.write(url2.read())
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, "wallpaper.jpg" , 0)