利用Python开发图片下载器之教程与源码分享

千库网图片下载助手开发

我是一个很爱美的人,写文章喜欢带点插图. 另外我也有一个VX公众账号,写推文总需要点封面图片和插图的嘛,为了看起来更加美观和优雅. 为此我在网上找了写图片,但是直接通过右键下载感觉很麻烦,而且有些图片网站没办法右键,加上我有时候需要提取图片外链用于markdown编辑. 所以我打算用Python写一个EXE图片下载助手,下面是开发这个助手的详细教程.


准备

  • 图片网站:千库网
  • 『背景图库』『商用插图』
  • 工具:Google Chrome 浏览器,Python 3.6,jupyter notebook(Anaconda)
  • Python 库:urllib,re,pyinstaller

注:此网站没办法使用鼠标右键,故无法直接保存图片,直接截图得到的图片包含水印,很不方便使用.


图片URL分析

  • 任意一张『商用图库』下的图片,例如:科幻风格精美大气魔方背景
  • F12调出Google Chrome浏览器的调试工具,再按F5刷新页面重新加载数据
  • 按照下面图片提示操作:
  • 复制的网址为
https://i-blog.csdnimg.cn/blog_migrate/d8b6820d50d51a71a41687c395ca6dc1.jpeg!r850/fw/800

浏览器地址栏粘贴后,打开,可以看到这个图片是有水印的

  • 去水印思路:通过观察image URL,可以看到后缀出现了jpg,所以我将网址jpg之后的删掉,再打开,就发现没有水印了,而且图片看起来也大了一点.
https://i-blog.csdnimg.cn/blog_migrate/d8b6820d50d51a71a41687c395ca6dc1.jpeg
  • 和原图比较:最后我将图片下载下来,和原图做了些对比(网站限制每天可以免费下载一次),发现这样下载的图片没有原图那么大,其他详细的大家可以自行通过PS进行对比.原图下载有时候是png格式,有时候是jpg格式,部分图片有提供PSD源文件,但是我觉得jpgpng差别不大吧?不过要是对图片有比较高的要求,当然是开会员啦,不过我插图的一般没什么很大的要求.

网页源代码分析

现在对图片的url差不多分析好了,现在要在源代码里面抓取image url了. 接下来分析网页的源代码

Ctl + U或者鼠标右键- - >查看网页源代码,接着按Ctl + F查找image URL
https://i-blog.csdnimg.cn/blog_migrate/d8b6820d50d51a71a41687c395ca6dc1.jpeg!r850/fw/800
然后的确存在这一的一个链接,如果找不到,可以尝试删掉一些参数测试.

然后还有『商用图库』的分析也是类似的,这里就不详细分析了,不过这里会存在一点问题,就是这个图库的图片有两种格式,横图竖图,在抓取的时候注意处理好就可以了,因为我们都是直接复制页面的url然后复制过去的.


写代码测试

message = ["http://588ku.com 千库网图片下载助手","下载说明:仅支持『背景图库』『商用插图』",
           " ","使用说明:","①在D盘新建一个文件夹“D:\图片素材”","②复制图片网址到软件,然后回车","③图片下载成功将储存在“D:\图片素材”"," "]
for i in range(0,len(message)):
    print(message[i])

def QKDownload():
    
    import urllib.request
    import urllib.error
    import re
    
    url = input('请输入图片网址:')

    headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36")
    opener = urllib.request.build_opener()
    opener.addheaders = [headers]

    data = opener.open(url).read()
    data2 = data.decode("utf-8", "ignore")

    pat = 'img-l-box"><img src="(.*?)!|img id="qhimg" src="(.*?)!'
    imageURL = re.compile(pat).findall(data2)
    imageURL = max(imageURL)
    imageURL = "".join(imageURL)

    pat2 = 'fw/800" alt="([\u4e00-\u9fa5]+)|true" alt="([\u4e00-\u9fa5]+)'
    i = re.findall(pat2,data2)
    i = max(i)
    i = "".join(i)
   
    try:
        print(" ")
        print("开始下载......")
        file ="D:/图片素材/"+str(i)+".jpg"
        urllib.request.urlretrieve(imageURL,file)
        print(" ")
        print("下载成功!!!")
        print(" ")
        print('图片链接为:')
        print(" ")
        print(imageURL)
        print(" ")
        print("==============================================我是分割线==============================================")
        print(" ")
        print("继续下载......")
        print(" ")
       
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)           
    QKDownload()

while True:
    QKDownload()
    if len(url) != 0:
        continue
        QKDownload()

代码说明:代码比较简单,想必大家都看的明白,在D盘建一个文件夹D:\图片素材,然后就可以在jupyter notebook或者Pycharm等IDE运行此代码了.
开始我没有增加图片命名的,后来增加了一个.


打包为EXE可执行文件

准备工作

这里使用pyinstaller打包,Python也有很多其他的打包库,大家可以根据自己的喜欢选择,因为我个人觉得这个比较简单,也还可以满足大部分的需求.
pyinstall 库官方文档
更多的用法,大家可以自行查看文档.
另外可以增加一个 ico 图标,推荐一个网站:easyicon

开始生成EXE

按照下面的图片操作:

pyinstaller -F -i ico_filename.ico py_filename.py

注:第一个是 ico 图标的名称,第二个是 py 文件名称(建议名称不要带中文,要修改EXE文件名可以到时候打包完成之后再修改)


测试使用

生成的 EXE 文件目录,其他的文件可以选择删除或者保留都没影响. 可以快捷方式到桌面.

测试图片的下载:

复制浏览器地址栏的网址到下载助手,回车


总结

因为我写文章总是使用 Markdown 编辑的,所以我顺便输出了图片的外链. 由于这是我自己使用的,我直接在源代码添加了存储路径,当然大家也可以增加一个自定义存储路径. 如果大家觉得这个界面不好看,也可以增加一个 GUI 界面,这里我推荐使用 PyQt开发,原因是市面上关于Python GUI的书籍较少,然后其他的Python GUI 库文档不够丰富,而PyQtQt(C++开发)在Python的应用,所以文档很丰富,开发工具也比较强大和完善。

最后想学习PyQt的,我这里推荐一本书吧.很抱歉,我没有找到电子版,喜欢的可以自己想办法或者去购买.

其他的大家也可以参考这个办法去继续开发,或者自己写点脚本然后打包,方便自己的工作和学习.

后记

本教程仅学习研究,请不要将本教程用于其他用途.

打包的EXE文件下载:QkPic.exe  提取码:3ygz


欢迎关注我的个人公众账号:net咖啡屋

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值