最近发现 老用Mac 自带的壁纸不爽,就用谷歌去找个可以免费下载壁纸的网站,手动下载图片比较慢,第一网站是国外的
第二,家里的网速差(不要装移动的)
绝对高清大图
直接上代码:
导入用到的库
获取网站源码的函数
返回列表页面的对应图片内容页的网址
返回相对应图片的url
图片下载函数
main函数
运行程序 计时
想要源码的同学 私密小编 回复 025
# -*- coding: utf-8 -*-
"""
@Time: 2018/1/15
@Author: songhao
@微信公众号: zeropython
@File: spider.py
"""
# 导入工程中用到的库文件
importre, os
importrequests,time
fromhashlibimportmd5
frommultiprocessingimportPool
defget_html(url):
"""
:param url: url
:return: html源码
"""
r=requests.get(url)
ifr.status_code==200:
returnr.text
return None
defget_list_href(html):
"""
:param html: html源码
:return: 返回列表页面的对应图片内容页的网址
"""
req='
'
hrefs=re.findall(req, html, re.S)
# print(hrefs)
ifhrefs:
returnhrefs
return None
defget_image_url(ht):
"""
:param ht: image_url 内页源码
:return: 返回相对应的url
"""
req='
\s*
img_href=re.search(req, ht, re.S)
ifimg_href:
returnimg_href.group(1)
return None
defsave_image(img_url):
'''
format 字符串格式化
os.getcwd() 获取当前的目录
md5(content).hexdigest() 生成md5
os.path.exists检测文件是否存在
'''
ir=requests.get(img_url)
ifir.status_code==200:
content=ir.content
file_path='/.'.format(os.getcwd(), md5(content).hexdigest(),'jpg')
print(file_path)
if notos.path.exists(file_path):
withopen(file_path,'wb')asf:
f.write(content)
#二进制写入
else:
print("已存在")
print("下载完成", img_url)
defmain():
first_url="https://hdwallsource.com/?page=%d"
# 构造url
get_all_urls= [first_url%xforxinrange(1,5)]
all_imges= []
foriinget_all_urls:
ht=get_html(i)
ifht:
list_hrefs=get_list_href(ht)
forlist_hrefinlist_hrefs:
list_href_ht=get_html(list_href)
imgurl=get_image_url(list_href_ht)
print("put img url to all_imges", imgurl)
all_imges.append(imgurl)
# 创建 10个进程
pool=Pool(processes=10)
forimgurlinall_imges:
print("开始下载", imgurl)
pool.apply_async(save_image,args=(imgurl,))
# save_image(imgurl)
pool.close()
pool.join()
if__name__=='__main__':
start=time.time()
main()
print('[info]耗时:%s'%(time.time()-start))
明天更新多线程下载图片,一起加油学习
领取专属 10元无门槛券
私享最新 技术干货