我是靠谱客的博主 微笑羽毛,这篇文章主要介绍python写一个爬虫GUI程序并生成windows程序,现在分享给大家,希望可以做个参考。

写在前面

也许坚持一件事,一年、两年后会有很大收获吧。
上周一朋友让帮忙写个爬虫,抓取某网站的商品列表。写完之后又不知道怎么给他,导出文件吧,可能每次要的时候又来找我。发代码吧,又怕他没有python环境。所以干脆写成一个GUI页面,再做成exe文件直接给他,他爱怎么玩就怎么玩。

文章包含内容

本篇文章包含的东西挺多。为了缩短写文章的时间。这里我直接省略了爬虫代码的编写。因为关于爬虫我也写了不少文章。python 爬取彩票网站,爬取某东网站机票
所以文章包含以下内容

  1. 导出csv文件
  2. 使用xlsxwriter导出excel文件
  3. xlsxwriter导出url图片到文件
  4. 使用Tkinter 生成GUI程序
  5. 使用pyinstaller生成windows程序

下面就分成这5部分来说明。

导出csv文件

csv文件是一种通过’,’来分割的字符串。所以在导出前,先要拼接好字符串。

复制代码
1
2
3
4
5
6
7
8
#写入csv文件处理方法 def write_csv(list): product_text = open('download/'+str(file_name)+'.csv', 'a') # 设置csv文件编码 # product_text.write(codecs.BOM_UTF8) for tmp in list: product_text.write(tmp + 'n') product_text.close()

需要注意的是product_text.write(codecs.BOM_UTF8) 当存在中文时,必须要加上这一行,否则生成的文件内容都是乱码。

生成excel文件

第2、3条一起说明。这里我使用的是xlsxwriter,只能生成excel文件,不能读取。当然也可以选择别的包来生产excel文件。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#写入excle文件处理方法 def write_xlsx(list,rows): #开始行数 i = (rows-1)*24 global sheet book = xlsxwriter.Workbook('download/'+str(file_name)+'.xlsx') sheet = book.add_worksheet('Richie') sheet.set_column('B:B', 23) row_index = int(i) for tmp in list: sheet.write('A'+str(row_index+1), tmp['product_name']) try: # 图片写入 url = tmp['url'] image_data = BytesIO(urlopen(url).read()) sheet.set_row(row_index, 120) sheet.insert_image('B' + str(row_index + 1), url, {'image_data': image_data}) except BaseException: text.insert(END, '第'+str(row_index+1)+'行的图片写入出错,将继续下载...n') text.update() sheet.write('C' + str(row_index + 1), tmp['product_price']) sheet.write('D' + str(row_index + 1), tmp['product_save']) row_index = row_index + 1 book.close()

这里需要特别说明的有

  1. 因为xlsxwriter只能写不能读,所以如果是一个循环的程序生成,可以把实例化变量提到循环外面,再通过global来调用。
  2. 因为xlsxwriter不支持URL直接写入。所以需要转成二进制后再写入单元格。image_data = BytesIO(urlopen(url).read()) 代码里我有一个捕获异常代码段。因为我的程序抓取的是一个外国网站,可变性比较大,比较出错影响代码继续进行。
  3. 因为图片是浮在表格上方,为了美观。可以先把单元格的宽度,高度设置一下。sheet.set_row(row_index, 120) sheet.set_column('B:B', 23)
  4. 需要注意比较重要的问题。在xlsxwriter里,配置单元格时。如果使用的是excel的形式如“B2”,安装excel格式就好。如果使用的是数字形式来表达单元格。行和列都是从0开始。

使用Tkinter 生成GUI程序

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
def main(): root = Tk() # 创建窗口对象的背景色 root.title("Australia daigou") #窗口标题 # 窗口大小 width, height = 450, 450 # 窗口居中显示 root.geometry('%dx%d+%d+%d' % ( width, height, (root.winfo_screenwidth() - width) / 2, (root.winfo_screenheight() - height) / 2)) # 窗口最大值 root.maxsize(600, 600) # 窗口最小值 root.minsize(400, 400) # 顶部标签 label = Label(root, text="Please enter the URL address") label.pack() # 全局变量,用于接收对话框输入的值。 global input_text input_text = StringVar() # 中部输入框 entry = Entry(root, textvariable=input_text, width=100) input_text.set('http://www.baidu.com') entry.pack() #单选框 global radio_value radio_value = StringVar() radio_value.set('csv') Radiobutton(root,variable = radio_value, text='csv(no image)', value = 'csv').pack() Radiobutton(root,variable = radio_value, text='xlsx(incloud image. very slow)', value ='xlsx' ).pack() # body部按钮 button = Button(root, text="Download file", command=dell) #创建按钮 button.pack() # 底部返回信息 global text text = Text(root) s = Scrollbar(root) s.pack(side=RIGHT, fill=Y) text.pack(side=LEFT, fill=Y) s.config(command=text.yview) text.config(yscrollcommand=s.set) root.mainloop()

代码里的注释都很详细,就不多解释了。不过也有几个地方需要注意

  1. 单选框这里,和web程序一样。要保证单选框为一个组(两者只能选其一)。需要设置一样的variable = radio_value,
  2. button = Button(root, text="Download file", command=dell)按钮后面绑定的是调用方法。dell方法。
  3. 如何要做一个有滚动条的文本框,需要创建一个组合的组件。代码中“# 底部返回信息” 因为是参考网上的,不详细说了。
  4. 要保证每次刷新出新的数据都在滚动条最底部,需要配置。text.see(END)
  5. 如果要执行过程中输入数据。要记得使用update,否则不会输出。
复制代码
1
2
text.insert(END, '正在下载第'+str(once)+'页...n') text.update()

图片为以上代码的GUI界面
这里写图片描述

使用pyinstaller生成windows程序

使用pyinstaller生成windows非常简单。这也许也是我越来越喜欢python的原因。使用什么工作,只需要引入一个包就可以直接使用。而且几行代码搞定。
同样使用 pip安装 pip install pyinstaller
安装成功后,cmd 进入要打包的.py 文件目录下。 只需要执行

复制代码
1
pyinstaller test.py

然后等待打包完成就好了。会在目录下生产两个文件夹 dist文件下有个exe可执行文件。一切搞定。

在使用pyinstaller 之前我还算使用了py2exe包来生产。对比之后还是觉得pyinstaller比较好用。因为py2exe生产过程比pyinstaller步骤要多一些。pip安装也不能直接安装。最可恨的是py2exe生成的exe没有把我的xmlx包引入进去…

尽可能缩减内容,但是写完文章还是花了1小时….

最后

以上就是微笑羽毛最近收集整理的关于python写一个爬虫GUI程序并生成windows程序的全部内容,更多相关python写一个爬虫GUI程序并生成windows程序内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部