前言

需要Python源码、PDF、视频资料可以点击下方链接获取

http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef

任务目标:

1.抓取不同类型的图片

2.编写一个GUI界面爬虫程序,打包成exe重新文件

3.遇到的难点

1.分析如何抓取不同类型的图片

首先打开网站,可以看到有如下6个类型的菜单
在这里插入图片描述
在这里插入图片描述

点击不同菜单,发现URL显示如下

大胸妹:https://www.buxiuse.com/?cid = 2

小翘臀:https://www.buxiuse.com/?cid = 6

可以看到每个类型图片对应不同的cid值

所以要想抓取不同类型的图片,只需要构造下url

将cid进行参数化,然后传给url即可

具体代码在以下定义

2.利用tkinter进行GUI编程

之前有写过一些tkinter编程的随笔

例如 利用python制作一个翻译工具

先来看一下这次设计的程序最终页面布局,

然后再具体讲下如何实现的,页面布局如下:
在这里插入图片描述
选择图片存储路径

抓取到的图片要保存到电脑本地,所以就想着最好能够自己挑选本地任意一个文件夹作为存储路径

后来网上冲浪一番发现tkinter是可以实现这个功能的

可以通过tkinter.filedialog模块中的askdirectory()方法实现

下面是在网上找到的一段示例代码

#coding:UTF-8
from tkinter import *
from tkinter.filedialog import askdirectory

def select_path():
    path_ = askdirectory()
    path.set(path_)
root = Tk()
path = StringVar()
Label(root,text = "目标路径:").grid(row = 0, column = 0)
Entry(root, textvariable = path).grid(row = 0, column = 1)
Button(root, text = "路径选择", command = select_path).grid(row = 0, column = 2)
root.mainloop()

具体到这个例子,

(1)定义一个文本框,用来存放(显示)选择的存储路径

self.input = tk.Entry(self.window, textvariable = self.path, width=80)  # 创建一个输入框,显示图片存放路径

(2)定一个按钮,来触发选择本地路径功能

self.t_button = tk.Button(self.window, text='选择路径', relief=tk.RAISED, width=8, height=1, command=self.select_Path)

(3)定义一个函数,来实现选取路径功能

def select_Path(self):
    """选取本地路径"""
    path_ = askdirectory()
    self.path.set(path_)

后续保存图片时,路径可以直接使用前面定义好的的self.input中的值

选择分类

因为图片分为了6个类别,每个类别对应一个cid值,所以可以预先把cid抽象出来,视为参数传递
(1)定义一个拖动框,存储图片类型

self.menu['value'] = ('大胸妹','小翘臀', '黑丝袜', '美腿控', '有颜值','大杂烩')

(2)根据选择性类型不同,返回不同的cid值

def get_cid(self):
    category = {
        'DX':  2,
        'XQT': 6,
        'HSW': 7,
        'MTK': 3,
        'YYZ': 4,
        'DZH': 5
    }
    cid = None
    if self.menu.get() == "大胸妹":
        cid = category["DX"]
    elif self.menu.get() == "小翘臀":
        cid = category["XQT"]
    elif self.menu.get() == "黑丝袜":
        cid = category["HSW"]
    elif self.menu.get() == "美腿控":
        cid = category["MTK"]
    elif self.menu.get() == "有颜值":
        cid = category["YYZ"]
    elif self.menu.get() == "大杂烩":
        cid = category["DZH"]
    return cid

3.填写爬取页数
在这里插入图片描述
在这里插入图片描述

自定义抓取深度,某些抓取前5页或者前10页

self.page = tk.Entry(self.window, width=5)  # 定义一个文本框,存放爬取页数

后面把这个文本文本的值传给url即可

3.遇到的问题

下载图片的名称无效,导致无法保存

有些图片没有名称,文件名就是.jpg,
这样在保存时会提示非法字符无法保存,程序也会报错,终止运行。

为了解决这个问题,我在每个文件名的末尾都加一个字母,这样就不会存在无名称图片了

file_path = save_path + '/' + t[0] + 'q' + '.jpg'

整体效果如下:
在这里插入图片描述


本文转载:CSDN博客