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

写在前面

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

文章包含内容

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

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

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

导出csv文件

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

#写入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文件。

#写入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程序

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,否则不会输出。
text.insert(END, '正在下载第'+str(once)+'页...n')
text.update()

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

使用pyinstaller生成windows程序

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

pyinstaller test.py 

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

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

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

最后

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部