python写一个爬虫GUI程序并生成windows程序

4 篇文章 1 订阅
1 篇文章 0 订阅

写在前面

也许坚持一件事,一年、两年后会有很大收获吧。
上周一朋友让帮忙写个爬虫,抓取某网站的商品列表。写完之后又不知道怎么给他,导出文件吧,可能每次要的时候又来找我。发代码吧,又怕他没有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小时….

  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以给你提供一个简单的思路,帮助你实现一个带有GUI界面和数据可视化的爬虫项目。 1. GUI界面:使用PythonTkinter模块或PyQt等框架,创建一个图形用户界面,使用户可以输入爬虫需要爬取的网站链接和其他参数。例如,可以创建一个包含网站链接、爬取深度、爬取时间间隔等参数的表单,用户可以在表单中输入相应的参数。 2. 数据可视化:使用Python的Matplotlib、Seaborn等可视化库,对爬取到的数据进行可视化处理。例如,可以将数据绘制成折线图、散点图、柱状图等。 3. 爬虫:使用Python的requests、BeautifulSoup等爬虫库,编爬虫程序,爬取网站上的数据,并将数据保存到本地文件中。在爬虫程序中,需要根据用户输入的参数,进行相应的处理,例如设置爬取的深度、爬取的时间间隔等。 4. 数据处理:使用Python的pandas等数据处理库,对爬取到的数据进行处理和清洗。例如,去除重复数据、处理缺失数据等。 5. 数据可视化:使用Python的Matplotlib、Seaborn等可视化库,对处理后的数据进行可视化处理,并在GUI界面上展示出来。例如,可以将数据绘制成折线图、散点图、柱状图等。 6. 数据存储:使用Python的pymysql等数据库库,将处理后的数据保存到数据库中。例如,可以将数据保存到MySQL或者SQLite等关系型数据库中。 综上所述,需要使用PythonTkinter、Matplotlib、requests、BeautifulSoup、pandas、pymysql等库,进行GUI界面、数据可视化、爬虫、数据处理、数据存储等模块的开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值