千家信息网

python怎么实现壁纸批量下载

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇"python怎么实现壁纸批量下载"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"
千家信息网最后更新 2026年11月01日python怎么实现壁纸批量下载

这篇"python怎么实现壁纸批量下载"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"python怎么实现壁纸批量下载"文章吧。

初始化项目

该项目使用virtualenv创建一个虚拟环境,以避免污染整个情况。使用pip3直接下载:

Pip3installvirtualenv然后在合适的地方创建一个新的壁纸-下载器目录,使用virtualenv创建一个名为venv的虚拟环境:

virtualenvvenv。venv/bin/激活下一步,创建一个依赖目录:

最后,yun下载并安装依赖项:

pip 3 install-requirements . txt分析爬虫工作步骤

为了简单起见,我们直接进入分类为"航空"的壁纸列表页面

如您所见,本页有10张壁纸可供下载。但是因为这里显示的都是缩略图,作为壁纸的定义远远不够,所以需要进入壁纸详情页才能找到HD的下载链接。点击第一张壁纸,你可以看到一个新的页面:

因为我的机器是Retina屏幕,所以打算直接下载最大的,保证高清(红圈显示的音量)。

了解具体步骤后,就是通过开发者工具找到对应的dom节点,提取对应的url。这个过程不再进行,读者可以自行尝试。接下来,输入编码部分。

访问页面

创建一个新的download.py文件,然后引入两个库:

from bs4 import美化组

导入请求接下来,编写一个访问url然后返回页面html的特殊函数:

defvisit_page(url):

标题={

用户代理' : ' Mozilla/5.0(Macintosh;intelmacosx 10 _ 13 _ 1)apple WebKit/537.36(KHTML,like gecko)Chrome/63 . 0 . 3239 . 108 safari/537.36'

}

r=requests.get(url,headers=headers)

r.encoding='utf-8 '

soup=美化组(r.text,' lxml ')

为了防止returnsoup被网站的反抓取机制击中,我们需要通过在头部添加UA来将爬虫伪装成普通浏览器,然后指定utf-8编码,最后以字符串格式返回html。

提取链接

获取页面html后,需要提取该页面壁纸列表对应的url:

defget_paper_link(第:页)

links=page . select(# contentidivullidiva)

collect=[]

forlinkinlinks:

collect.append(link.get('href '))

函数returncollect将提取列表页面中所有壁纸详细信息的url。

下载壁纸

有了详细页面的地址,我们就可以进去选择合适的尺寸。分析页面的dom结构后,我们可以知道每个大小对应一个链接:

所以第一步是提取对应于这些大小的链接:

墙

paper_source=visit_page(link) wallpaper_size_links=wallpaper_source.select('#wallpaper-resolutions>a') size_list=[] forlinkinwallpaper_size_links: href=link.get('href') size_list.append({ 'size':eval(link.get_text().replace('x','*')), 'name':href.replace('/download/',''), 'url':href })

size_list就是这些链接的一个集合。为了方便接下来选出最高清(体积最大)的壁纸,在size中我使用了eval方法,直接把这里的5120x3200给计算出来,作为size的值。

获取了所有的集合之后,就可以使用max()方法选出最高清的一项出来了:

biggest_one=max(size_list,key=lambdaitem:item['size'])

这个biggest_one当中的url就是对应size的下载链接,接下来只需要通过requests库把链接的资源下载下来即可:

result=requests.get(PAGE_DOMAIN+biggest_one['url'])ifresult.status_code==200:open('wallpapers/'+biggest_one['name'],'wb').write(result.content)

注意,首先你需要在根目录下创建一个wallpapers目录,否则运行时会报错。

整理一下,完整的download_wallpaper函数长这样:

defdownload_wallpaper(link):wallpaper_source=visit_page(PAGE_DOMAIN+link)wallpaper_size_links=wallpaper_source.select('#wallpaper-resolutions>a')size_list=[]forlinkinwallpaper_size_links:href=link.get('href')size_list.append({'size':eval(link.get_text().replace('x','*')),'name':href.replace('/download/',''),'url':href})biggest_one=max(size_list,key=lambdaitem:item['size'])print('Downloadingthe'+str(index+1)+'/'+str(total)+'wallpaper:'+biggest_one['name'])result=requests.get(PAGE_DOMAIN+biggest_one['url'])ifresult.status_code==200:open('wallpapers/'+biggest_one['name'],'wb').write(result.content)

批量运行

上述的步骤仅仅能够下载第一个壁纸列表页的第一张壁纸。如果我们想下载多个列表页的全部壁纸,我们就需要循环调用这些方法。首先我们定义几个常量:

importsysiflen(sys.argv)!=4:print('3argumentswererequiredbutonlyfind'+str(len(sys.argv)-1)+'!')exit()category=sys.argv[1]try:page_start=[int(sys.argv[2])]page_end=int(sys.argv[3])except:print('Thesecondandthirdargumentsmustbeanumberbutnotastring!')exit()

这里通过获取命令行参数,指定了三个常量category, page_start和page_end,分别对应着壁纸分类,起始页页码,终止页页码。

为了方便起见,再定义两个url相关的常量:

PAGE_DOMAIN='http://wallpaperswide.com'PAGE_URL='http://wallpaperswide.com/'+category+'-desktop-wallpapers/page/'

接下来就可以愉快地进行批量操作了,在此之前我们来定义一个start()启动函数:

defstart():ifpage_start[0]<=page_end:print('Preparingtodownloadthe'+str(page_start[0])+'pageofallthe"'+category+'"wallpapers...')PAGE_SOURCE=visit_page(PAGE_URL+str(page_start[0]))WALLPAPER_LINKS=get_paper_link(PAGE_SOURCE)page_start[0]=page_start[0]+1forindex,linkinenumerate(WALLPAPER_LINKS):download_wallpaper(link,index,len(WALLPAPER_LINKS),start)

然后把之前的download_wallpaper函数再改写一下:

defdownload_wallpaper(link,index,total,callback):wallpaper_source=visit_page(PAGE_DOMAIN+link)wallpaper_size_links=wallpaper_source.select('#wallpaper-resolutions>a')size_list=[]forlinkinwallpaper_size_links:href=link.get('href')size_list.append({'size':eval(link.get_text().replace('x','*')),'name':href.replace('/download/',''),'url':href})biggest_one=max(size_list,key=lambdaitem:item['size'])print('Downloadingthe'+str(index+1)+'/'+str(total)+'wallpaper:'+biggest_one['name'])result=requests.get(PAGE_DOMAIN+biggest_one['url'])ifresult.status_code==200:open('wallpapers/'+biggest_one['name'],'wb').write(result.content)ifindex+1==total:print('Downloadcompleted!\n\n')callback()

最后指定一下启动规则:

if__name__=='__main__':start()

运行项目

在命令行输入如下代码开始测试:

python3download.pyaero12

然后可以看到下列输出:

拿charles抓一下包,可以看到正在脚本正在平稳地运行中:

以上就是关于"python怎么实现壁纸批量下载"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

壁纸 页面 链接 接下来 内容 函数 就是 步骤 运行 常量 方法 目录 项目 高清 合适 最大 两个 命令 大小 文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东猪兼强互联网科技有限公司 互联网巨头反垄断金融科技 关于新基建和互联网科技 北京互联网络科技有限公司 奇士达互联网科技 撒么互联网科技公司 互联网科技博客 左右互联网络科技 科技类的互联网平台 卓越科技互联网 招聘 华中科技有哪些互联网大佬 济南华为互联网科技产业总部基地 互联网系的金融科技公司 互联网时代科技改变生活 玉溪新华互联网科技好不好 济南有互联网科技公司吗 工业互联网展湾科技股份有限公司 锡山区互联网智能科技产品供应 山东星卡互联网科技有限公司官网 长沙渺峰互联网科技有限公司 联恩商钥互联网科技有限公司 山东吉时兔互联网科技有限公司 青海省互联网新科技 温州喔噻互联网科技有限公司 互联网科技商业 徐州市互联网科技有限公司 江苏互联网智能科技软件 互联网硬科技公司 互联网领先科技活动 恒生科技互联网指数十大成分股
0