from tkinter import *
import tkinter.filedialog
#新建按钮控件
def newfile():
#点击了按钮就打印hello
print('hello')
def openfile():
pass
def savefile():
#askdirectory(title='另存为...',initialfile= '未命名.txt',filetype=[('文本文档','*.txt'),('python文件','*.py')])
filename = tkinter.filedialog.asksaveasfilename(title='另存为...',initialfile= '未命名.txt',filetype=[('文本文档','*.txt'),('python文件','*.py')
],defaultextension='.txt')
#打印文件路径
print(filename)
if not filename:
return
fn = open(filename,'w')
fn.write(str(text.get(1.0,END).encode('utf-8')))
fn.close()
text.delete(1.0,END)
root.title(u'%s - 记事本' %filename.split('/') [-1])
pass
def saveas():
pass
#窗口
root = Tk()
#标题
root.title('无标题 - 记事本')
#窗口大小
root.geometry('400x300')
#菜单
#顶级
me = Menu()
root.config(menu=me)
#二级菜单
filemenu = Menu(me)
#按钮事件
filemenu.add_command(label='新建',accelerator='Ctrl + N',command=newfile)
filemenu.add_command(label='打开',accelerator='Ctrl + O',command=openfile)
filemenu.add_command(label='保存',accelerator='Ctrl + S',command=savefile)
filemenu.add_command(label='另存为',command=saveas)
filemenu.add_separator()
filemenu.add_command(label='页面设置')
filemenu.add_command(label='打印')
filemenu.add_separator()
filemenu.add_command(label='退出',command=root.quit)
me.add_cascade(label='文件',menu=filemenu)
#编辑区
text = Text()#多行文本框
#页面布局
text.pack(expand=YES,fill=BOTH)
#主循环
#窗口主件放在主循环里面
#每一个按钮对于一个事件必须对于一个变量或函数
root.mainloop()
这里写入字符串后格式就变了不知道什么这啥编码?
有知道的吗?
fn.write(str(text.get(1.0,END).encode('utf-8')))
这有个文件写入错误
文件写入的是str数据,而不是BeautifulSoup
解决:
只需要将BeautifulSoup转化成str格式就成
tk
import requests
import os
from tkinter import *
import tkinter as tk
#文件存储
from tkinter.filedialog import askdirectory
from bs4 import BeautifulSoup
import bs4
import tkinter
#存储
def select_path():
global save_path
path_ = askdirectory()
path.set(path_)
#保存路径
save_path = path_
if not os.path.exists(save_path):
# 切换到当前目录
os.chdir(save_path)
print(f'你选择的存储路径是:{save_path}')
else:
os.chdir(save_path)
#爬取
def spider():
User = page.get()
print(User)
urls = 'http://www.crcz.com/touxiang/nv/list_'
for i in range(1, int(page.get())+1):
headers = {'user-agent': 'user-agent'}
url = urls + str(i) + '.html' # 拼接url
print(url)
# 构造请求
res = requests.get(url, headers=headers)
res.encoding = res.apparent_encoding
html = res.text
soup = BeautifulSoup(html, 'lxml')
div_img = soup.select('.tx_list>ul>li')
for img_a in div_img:
# 图片
img = img_a.a.img.get('src')
#print(img)
# 图片二进制
img_data = requests.get(url=img, headers=headers).content
# 图片名称
img_name = img_a.find('a', class_='txt').get_text()
print(img_name)
save_path = img_name + '.jpg'
with open(save_path, 'wb') as f:
f.write(img_data)
print(img_name, '下载成功')
#
#添加数据
text.insert(END,save_path,img_name)
#文本框向下滚动
text.see(END)
#主函数
def main():
global page,text,path
root = Tk()
root.title('爬虫工具1.0 墨渊')
# 窗口的大小,后面的加号是窗口在整个屏幕的位置
root.geometry('810x810')
path = StringVar()
# 第二行,用户名标签及输入框
l_user = Label(root, text='爬取分页:')
l_user.grid(row=1, column=0)
#分页
page = Entry(root)
page.grid(row=1, column=1)
#路径
Label(root, text="目标路径:").grid(row=0, column=0)
#文件路径
input1 = Entry(root)
input1.grid(row=0, column=1)
Entry(root, textvariable=path).grid(row=0, column=1)
Button(root, text="路径选择", command=select_path).grid(row=0, column=2)
# 设置按钮 sticky对齐方式,N S W E
button1 = Button(root, text='开始下载', command=spider).grid(row=1, column=2)
# 文本框
text = Listbox(root, font=('微软雅黑', 15), width=60, height=60)
text.grid(row=2, columnspan=2)
root.mainloop()
if __name__ == '__main__':
main()
总结难点是tk结合爬虫实现gui界面的交互
布局控件之类
用到的参数
组件–Label
组件–Button 按钮与功能的绑定command 属性接受一个函数名实现按钮交互
Entry(输入框)获取用户信息
get 函数 使用的时候不需要任何参数,它的返回值就是该输入框的内容
第一个写的gui程序 如有不好多多包涵
参数详解参数
https://cloud.tencent.com/developer/article/1858258?from=article.detail.1879196
使用pyinstaller打包模块
注意更改exe默认图标必须要是ico
这里提供一个图片格式转换找一个自己喜欢的图片
http://www.zuohaotu.com/image-to-ico.aspx
pyinstaller -F -w -i 图片名.ico 文件.py
下载器 网盘地址
链接:https://pan.baidu.com/s/1DdSGUGDyYHQ_YZj2qR6omA
提取码:6666