python下载高清壁纸
若有违规行为,请管理员帮忙删除,谢谢!壁纸网址:https://bing.ioliu.cn/ranking,爬取的是排行榜上的壁纸
源码:
import bs4,re,os,requests
session = requests.session()
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0"}
def fetch_content(url): # 获取任意网页内容,并用 beautifulsoup 格式化
req = session.get(url,headers = headers)
htmls = req.text
soup = bs4.BeautifulSoup(htmls,features = 'lxml')
return soup
print('此程序会从必应壁纸网站下载壁纸,并将壁纸保存在 D:\必应壁纸 目录下。')
s = input('键入任意键键开始,否则直接关闭程序:')
flag = False
if s != None:
flag = True
if flag:
if os.path.exists('D:\必应壁纸') == True: # 如果目录不存在则创建
print("目录已存在")
else:
os.mkdir('D:\必应壁纸')
print('目录创建成功')
k = 1
p = input('请输入要下载的页数(每页12张,建议不超过10页):')
child_flag = False
if p.isdigit() == True:
child_flag = True
if child_flag:
while k <= int(p):
url = 'https://bing.ioliu.cn/ranking?p=' + str(k) # p=6 即获取第六页的内容
soup = fetch_content(url)
pic_url = soup.body.find_all(class_='mark') # 获取图片子网址
description = soup.find_all(class_='description')
# 获取图片标题
for i in range(len(pic_url)):
# name = ''.join(re.findall('(\w*\S?\s*\w*\s*\S?\w+\S?\w*)\W{2}',description.h3.string))
title = description.h3.string
name = ''.join(re.findall('([\s\S]*?)\W{2}',title))
print('正在下载:\t', name) # 打印图片所属子页面以及图片标题
img = 'https://bing.ioliu.cn' + pic_url.get('href')[:-9] + 'download'
img = session.get(img,proxies = {'http':'120.78.199.148'},headers = headers) # 下载
try:
if os.path.exists('D:/必应壁纸/' + name + '.jpg') == False:
with open('D:/必应壁纸/' + name + '.jpg','wb') as f:
f.write(img.content)
else:
pass
except:
pass
print('第%s页:%s张下载完成!'%(k,i + 1))
k += 1
print('%s页%s张全部下载完成!'%(int(p),int(p) * 12))
else:
print('请输入数字!')
exit('程序发生错误!')
else:
exit('程序发生错误!')
程序运行如图:
(我也不知道为什么这么不清晰)
这是一些下载好的图片:
最后用pyinstaller 打包成了一个可执行程序(在同学电脑上测试可以正常运行),这个程序国产软件会报毒(例如腾讯安全管家),添加信任就好,不过我的eset就没有报。再次证明国产杀毒软件就是垃圾!!!!
eset 扫描结果:
程序下载地址:https://www.lanzous.com/i1u8cij
本帖最后由 dreamrise 于 2018-10-8 17:50 编辑
整理里一遍楼主的代码,修改了两处可能的BUG后可以运行了。
BUG1: 42行
title = description.h3.string
BUG2: 47行
img = 'https://bing.ioliu.cn' + pic_url.get('href')[:-9] + 'download'
原文中的估计被编辑器吃掉了。
BUG3: 47行,这个BUG导致第10页开始无法下载,已修改。(难怪楼主建议不超过10页)
img = 'https://bing.ioliu.cn' + pic_url.get('href')[:-(8+len(str(k)))] + 'download'
BUG4: 名称如果有/会下载不了,所以替换成_
name = name.replace('/','_').replace('\\','_')
# -*- coding: utf-8 -*-
import bs4,re,os,requests
session = requests.session()
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0"}
def fetch_content(url): # 获取任意网页内容,并用 beautifulsoup 格式化
req = session.get(url,headers = headers)
htmls = req.text
soup = bs4.BeautifulSoup(htmls,features = 'lxml')
return soup
print('此程序会从必应壁纸网站下载壁纸,并将壁纸保存在 D:\必应壁纸 目录下。')
s = input('键入任意键键开始,否则直接关闭程序:')
flag = False
if s != None:
flag = True
if flag:
if os.path.exists('D:\必应壁纸') == True: # 如果目录不存在则创建
print("目录已存在")
else:
os.mkdir('D:\必应壁纸')
print('目录创建成功')
k = 1
p = input('请输入要下载的页数(每页12张,建议不超过10页):')
child_flag = False
if p.isdigit() == True:
child_flag = True
if child_flag:
while k <= int(p):
url = 'https://bing.ioliu.cn/ranking?p=' + str(k) # p=6 即获取第六页的内容
soup = fetch_content(url)
pic_url = soup.body.find_all(class_='mark') # 获取图片子网址
description = soup.find_all(class_='description')
# 获取图片标题
for i in range(len(pic_url)):
# name = ''.join(re.findall('(\w*\S?\s*\w*\s*\S?\w+\S?\w*)\W{2}',description.h3.string))
title = description.h3.string
name = ''.join(re.findall('([\s\S]*?)\W{2}',title))
name = name.replace('/','_').replace('\\','_')
print('正在下载:\t', name) # 打印图片所属子页面以及图片标题
img = 'https://bing.ioliu.cn' + pic_url.get('href')[:-(8+len(str(k)))] + 'download'
img = session.get(img,proxies = {'http':'120.78.199.148'},headers = headers) # 下载
try:
if os.path.exists('D:/必应壁纸/' + name + '.jpg') == False:
with open('D:/必应壁纸/' + name + '.jpg','wb') as f:
f.write(img.content)
else:
pass
except:
pass
print('第%s页:%s张下载完成!'%(k,i + 1))
k += 1
print('%s页%s张全部下载完成!'%(int(p),int(p) * 12))
else:
print('请输入数字!')
exit('程序发生错误!')
else:
exit('程序发生错误!') 程序如果不能正常运行就。。。就别找我了,我也是刚接触{:1_896:} 贴的代码缩进有问题 {:1_937:} {:1_893:} 程序可以运行, 路过,顶一个
第25行代码报错的,把22行和25行的反斜杠符号\改成正斜杠符号/ 话说怎么用的 我在win10 上只能打开软件,但是无任何反应 fly-with-fire 发表于 2018-9-9 20:35
程序如果不能正常运行就。。。就别找我了,我也是刚接触
请楼主根据4楼的建议修改下,不然10页以后的壁纸无法下载。。。。
还有就是能不能指定下载某页的壁纸,不然每次都要全部重新下载,谢谢! dreamrise 发表于 2018-10-8 15:33
整理里一遍楼主的代码,修改了两处可能的BUG后可以运行了。
BUG1: 42行
请问能不能帮忙打包一个EXE可执行文件,谢谢!