netCafe 发表于 2018-9-29 23:48

Python开发之千库网图片下载助手

本帖最后由 netCafe 于 2018-10-25 22:44 编辑

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



---

## 准备

- **图片网站:[千库网](http://588ku.com)**
- **『背景图库』『商用插图』**
- **工具:Google Chrome 浏览器,Python 3.6,jupyter notebook(Anaconda)**
- **Python 库:urllib,re,pyinstaller**

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

---

## 图片URL分析

-**任意一张『商用图库』下的图片,例如:[科幻风格精美大气魔方背景](http://588ku.com/ycbeijing/4931907.html)**
- **按`F12`调出`Google Chrome`浏览器的调试工具,再按`F5`刷新页面重新加载数据**
- **按照下面图片提示操作:**
![](https://i.imgur.com/KkL0SE4.png)
![](https://i.imgur.com/j4BDx1Z.png)
![](https://i.imgur.com/tqIAf8K.png)

- **复制的网址为**
```xml
http://bpic.588ku.com/back_pic/04/93/19/07591962bbc0b6c.jpg!r850/fw/800
```
**浏览器地址栏粘贴后,打开,可以看到这个图片是有水印的**
![](https://i.imgur.com/9Mdk071.jpg)

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

---

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

**`Ctl + U`或者`鼠标右键`- - >`查看网页源代码`,接着按`Ctl + F`查找image URL**
`http://bpic.588ku.com/back_pic/04/93/19/07591962bbc0b6c.jpg!r850/fw/800`
**然后的确存在这一的一个链接,如果找不到,可以尝试删掉一些参数测试.**

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

---

## 写代码测试

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

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 =

    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运行此代码了.**
**开始我没有增加图片命名的,后来增加了一个.**

![](https://i.imgur.com/Arxvlsb.png)
---

## 打包为EXE可执行文件
### 准备工作
**这里使用`pyinstaller`打包,Python也有很多其他的打包库,大家可以根据自己的喜欢选择,因为我个人觉得这个比较简单,也还可以满足大部分的需求.**
**(https://pyinstaller.readthedocs.io/en/stable/)**
**更多的用法,大家可以自行查看文档.**
**另外可以增加一个 `ico` 图标,推荐一个网站:(https://www.easyicon.net/)**

### 开始生成EXE
**按照下面的图片操作:**
```python
pyinstaller -F -i ico_filename.ico py_filename.py
```
**注:第一个是 ico 图标的名称,第二个是 py 文件名称(建议名称不要带中文,要修改EXE文件名可以到时候打包完成之后再修改)**
![](https://i.imgur.com/Kpl4Xi8.png)
![](https://i.imgur.com/skVMFRP.png)
---

### 测试使用
**生成的 EXE 文件目录,其他的文件可以选择删除或者保留都没影响. 可以快捷方式到桌面.**
![](https://i.imgur.com/EwI6cey.png)
![](https://i.imgur.com/pf6esb0.png)
**测试图片的下载:**
- **『背景图库』的一张图片 http://588ku.com/ycbeijing/4490071.html**
- **『商用图库』的一张图片 http://588ku.com/ichahua/9695.html**

**复制浏览器地址栏的网址到下载助手,回车**
![](https://i.imgur.com/h8yx1zI.png)

![](https://i.imgur.com/b7anEbv.png)

---

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

**最后想学习`PyQt`的,我这里推荐一本书吧.很抱歉,我没有找到电子版,喜欢的可以自己想办法或者去购买.**
![](https://i.imgur.com/KBrBEOW.jpg)
**其他的大家也可以参考这个办法去继续开发,或者自己写点脚本然后打包,方便自己的工作和学习.**

## 下载

**打包的EXE文件下载:(https://pan.baidu.com/s/19EpT7IQRu2LxL3n_P82SHA )  提取码:3ygz**

---
## 免费评分:觉得有帮助的,请免费给我评分,谢谢.
**码字不易,请评分鼓励支持一下. 如需更多Python,Python爬虫和数据分析学习教程,欢迎关注收听我,获取实时消息**

![](https://i.imgur.com/zUxQh2q.png)

yourbo 发表于 2018-10-22 08:56

netCafe 发表于 2018-10-22 08:52
看了你的注册日期,你是dalao,我现在刚在使用这个软件,哈哈、最近在准备开发一个GUI用户界面,然后可以 ...

我是潜水的,没发过帖子,哈哈,只是上来找资源而已

netCafe 发表于 2018-10-22 08:52

yourbo 发表于 2018-10-22 08:51
楼主厉害,威武啊。

看了你的注册日期,你是dalao,我现在刚在使用这个软件,哈哈、最近在准备开发一个GUI用户界面,然后可以更方便添加更多的支持网站

1257845453 发表于 2018-9-29 23:58

漂亮66666

majia1317 发表于 2018-9-30 00:10

不错,学习了。

Alon88888888 发表于 2018-9-30 00:12

不兼容32位的   能不能搞个32位的

liaojack8 发表于 2018-9-30 00:18

漂亮 好文必須收藏

大侠徐帝奴丶 发表于 2018-9-30 00:39

不得不说这很钮皮了

netCafe 发表于 2018-9-30 01:15

大侠徐帝奴丶 发表于 2018-9-30 00:39
不得不说这很钮皮了

啥???

25jiepo 发表于 2018-9-30 01:20

其实用油猴也可以,而且貌似还方便些。。。。。不过楼主也很6{:1_893:}想到了去掉网址jpg后面部分获取图片,换我打死也想不到{:1_893:}

netCafe 发表于 2018-9-30 02:19

25jiepo 发表于 2018-9-30 01:20
其实用油猴也可以,而且貌似还方便些。。。。。不过楼主也很6想到了去掉网址jpg后面部分获取图片 ...

这个也很简单

heang567 发表于 2018-9-30 07:14

学习了,支持下
页: [1] 2 3 4 5 6
查看完整版本: Python开发之千库网图片下载助手