前言
需要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'
整体效果如下: