Head
既然你能找到这里,我也就不问你是出于什么目的才要导出这些照片的了
来吧,先看效果图:
如果这是你想要的效果,那么OK,这个实现起来非常简单,你只需准备以下内容:
- Python 3.6
- 合适的编辑器,我用Visual Studio Code
- 电子相册若干,比如这样的
Before Coding
首先在浏览器上访问电子相册的Url,F12开发者工具,先来分析一下源码
哦,我的上帝!瞧瞧,我发现了什么,简直就是不设防,资源路径是如此的露骨,我们此行的目标就是通过这些Url来获取图片并保存到本地了!
Coding
编码之前,先在大脑里构想一下整体流程,理清思路:
- 通过电子相册url获取HTML代码
- 使用str.find()等方法,从HTML代码中提取图片Url
- 使用urllib.request.urlretrieve()方法,将图片写入到本地文件
1. spider.py
#coding=utf-8
import urllib
import time
import random
import http.cookiejar
# 伪装成浏览器获取指定url内容,中文转码
def get_html(url):
cj = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36'),('Cookie','4564564564564564565646540')]
urllib.request.install_opener(opener)
html_bytes = urllib.request.urlopen(url).read()
html_string = html_bytes.decode('utf-8')
return html_string
# 下载指定url资源,写入到本地目录(该目录需要提前创建好),获取系统时间戳作为文件名
def download_file(url):
t = time.time()
file_name = int(round(t * 1000))
try:
urllib.request.urlretrieve(url,'/workspace/python/picture2/%s.jpg' % file_name)
except Exception as e:
pass
print('Donwload picture %s.jpg' % file_name)
# 获取全部页面内容
html = get_html('https://wmml1.kagirl.cn/kphoto/gotoshow.php?bookid=dD2nhG888UwJRrUg6crMmUdZT1OtTXIuPVmwpJ5UxaM&wxid=wmml&shareid=&onmake=false')
# 过滤,锁定图片url代码段上下文
html = html[html.find('slider_images_url.push') : html.find('var date')]
# 整理,移除html中的无用字符,如单引号等,使用split()方法切割成数组
urlArray = html.replace('slider_images_url.push(', '').replace('\'','').split(');')
# 遍历数组 执行下载方法
for str in urlArray:
download_file(str)
Console
执行Python代码,控制台打印信息:
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
PS E:\workspace\python> cd 'E:\workspace\python'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:/Users/Dracarys/AppData/Local/Programs/Python/Python36/python.exe' 'C:\Users\Dracarys\.vscode\extensions\ms-python.python-2018.4.0\pythonFiles\PythonTools\visualstudio_py_launcher_nodebug.py' 'E:\workspace\python' '4585' '34806ad9-833a-4524-8cd6-18ca4aa74f14' 'RedirectOutput,RedirectOutput' 'e:\workspace\python\spider.py'
Donwload picture 1526714564235.jpg
Donwload picture 1526714564466.jpg
Donwload picture 1526714564824.jpg
PS E:\workspace\python>
顺利的话,相册中所包含的图片就已经被导出到你指定的文件夹了:
End
如果执行失败,可能是因为不同电子相册制作平台所生成的模板代码不同,导致获取不到指定的资源项,自行根据其HTML代码修改筛选逻辑即可。