python3 爬虫实战:为爬虫添加 GUI 图像界面 之 tkinter
?
From:https://blog.csdn.net/Fan_shui/article/details/81611752
?
?
一、前言
?
前面我們寫的爬蟲只能運(yùn)行在具有python環(huán)境的電腦上,若是把源代碼發(fā)給別人,很大可能性是運(yùn)行不了的,所以我們本節(jié)的目的是為爬蟲創(chuàng)建 GUI 界面,并打包成exe可執(zhí)行文件。
知乎:https://zhuanlan.zhihu.com/p/41866570
?
?
二、學(xué)習(xí)知識(shí)點(diǎn)
?
tkinter:tkinter 是 python 內(nèi)置的模塊,不用安裝,可直接導(dǎo)入
tkinter的學(xué)習(xí)是參考b站的一個(gè) python gui 界面設(shè)計(jì)的視頻 Python 教程:https://www.bilibili.com/video/av26214247?from=search&seid=10819799360989272623
Python GUI 編程(Tkinter) | 菜鳥教程:http://www.runoob.com/python/python-gui-tkinter.html
?
?
三、圖形界面
?
示例程序:
from tkinter import *def main():#創(chuàng)建空白窗口,作為主載體root = Tk()root.title('python')#顯示窗口mainloop()main()運(yùn)行后產(chǎn)生下圖:
接下來設(shè)置窗口大小:root.geometry('600x300+398+279')
這個(gè)418x200可以通過qq的截圖工具得到,截圖的時(shí)候會(huì)有個(gè)數(shù)據(jù)一直在動(dòng),就是距離屏幕左上角的距離,后面的+398+279是顯示的是窗口在整個(gè)屏幕的位置
然后我們添加標(biāo)簽控件
#標(biāo)簽控件,窗口中放置文本組件 Label(root,text='請(qǐng)輸入下載的url:',font=("華文行楷",15),fg='black').grid()控件的第一個(gè)參數(shù)基本都是我們的主載體,因?yàn)闃?biāo)簽是包含在我們的父載體下的。后面的grid是定位,定位有三種,grid,place,pack,其中g(shù)rid是網(wǎng)格式的定位,如下圖:
圖中的(0,0)表示0行h0列,(0,1)表示0行第二列。網(wǎng)格式定位的意思是說那些框架是按照?qǐng)D中的表格放置的,上面代碼中g(shù)rid中沒有傳入?yún)?shù),默認(rèn)為(0,0),即放在0行0列,效果如下圖
接下來我們放個(gè)輸入url的輸入框
#Entry是可輸入文本框 url_input=Entry(root,font=("微軟雅黑",15),width=50) url_input.grid(row=0,column=1)grid這次定位在0行1列,與上一個(gè)標(biāo)簽控件在同一行。
下面我們?cè)黾觽€(gè)顯示輸出的控件,我們采用列表控件
#列表控件 text=Listbox(root,font=('微軟雅黑',15),width=45,height=10) #columnspan 組件所跨越的列數(shù) text.grid(row=1,columnspan=2)columnspan表示合并兩個(gè)列
下面我們?cè)偬砑觾蓚€(gè)按鈕
設(shè)置按鈕 sticky對(duì)齊方式,N S W E
其中第一個(gè)按鈕中添加了command,點(diǎn)擊這個(gè)按鈕時(shí),就會(huì)調(diào)用Crawl_content這個(gè)函數(shù)(現(xiàn)在還沒有寫這個(gè)函數(shù),先去掉),后面的grid中添加了sticky=W,sitcky是對(duì)齊方式,第二個(gè)botton主要是退出GUI界面
from tkinter import *def main():global url_input, text# 創(chuàng)建空白窗口,作為主載體 root = Tk()root.title('測(cè)試——貓眼電影')# 窗口的大小,后面的加號(hào)是窗口在整個(gè)屏幕的位置 root.geometry('550x400+398+279')# 標(biāo)簽控件,窗口中放置文本組件 Label(root, text='請(qǐng)輸入下載的url:', font=("華文行楷", 20), fg='black').grid()# 定位 pack包 place位置 grid是網(wǎng)格式的布局 #Entry是可輸入文本框 url_input = Entry(root, font=("微軟雅黑", 15))url_input.grid(row=0, column=1)# 列表控件 text = Listbox(root, font=('微軟雅黑', 15), width=45, height=10)# columnspan 組件所跨越的列數(shù) text.grid(row=1, columnspan=2)# 設(shè)置按鈕 sticky對(duì)齊方式,N S W E button = Button(root, text='開始下載', font=("微軟雅黑", 15)).grid(row=2, column=0, sticky=W)button = Button(root, text='退出', font=("微軟雅黑", 15), command=root.quit).grid(row=2, column=1, sticky=E)# 使得窗口一直存在 mainloop()main()現(xiàn)在界面已經(jīng)做好了,本節(jié)主要是介紹界面設(shè)計(jì),爬蟲的內(nèi)容具體不再介紹,是個(gè)非常簡(jiǎn)單的小爬蟲
from tkinter import * import requests import os from bs4 import BeautifulSoup from pyquery import PyQuery as pq import csvos.chdir('E:\爬蟲數(shù)據(jù)')def crawl_content():url = url_input.get()headers = {'user-agent': 'user-agent'}file = csv.writer(open('貓眼電影.csv', 'w'))for i in range(0, 100, 10):new_url = url + '?offset=%d' % iprint('在解析網(wǎng)址中:', new_url)req = requests.get(url=new_url, headers=headers)html = req.textdoc = pq(html)items = doc('dl.board-wrapper dd').items()for each in items:title = each.find('a').text()# 添加數(shù)據(jù) text.insert(END, title)# 文本框向下滾動(dòng) text.see(END)# 更新 text.update()print('已抓取完畢')def main():global url_input, text# 創(chuàng)建空白窗口,作為主載體 root = Tk()root.title('測(cè)試——貓眼電影')# 窗口的大小,后面的加號(hào)是窗口在整個(gè)屏幕的位置 root.geometry('550x400+398+279')# 標(biāo)簽控件,窗口中放置文本組件 Label(root, text='請(qǐng)輸入下載的url:', font=("華文行楷", 20), fg='black').grid()# 定位 pack包 place位置 grid是網(wǎng)格式的布局 #Entry是可輸入文本框 url_input = Entry(root, font=("微軟雅黑", 15))url_input.grid(row=0, column=1)Label(root, text='貓眼電影url: http://maoyan.com/board/4', font=("微軟雅黑", 10), fg='black').grid(row=1)# 列表控件 text = Listbox(root, font=('微軟雅黑', 15), width=45, height=10)# columnspan 組件所跨越的列數(shù) text.grid(row=2, columnspan=2)# 設(shè)置按鈕 sticky對(duì)齊方式,N S W E button = Button(root, text='開始下載', font=("微軟雅黑", 15), command=crawl_content).grid(row=3, column=0, sticky=W)button = Button(root, text='退出', font=("微軟雅黑", 15), command=root.quit).grid(row=3, column=1, sticky=E)# 使得窗口一直存在 mainloop()main() # http://maoyan.com/board/4url_input把它設(shè)置為全局變量,在爬蟲抓取的時(shí)候可以通過get()獲得我們輸入的url,同樣為了讓抓取的內(nèi)容顯示在我們的列表控件中,我們需要把text這個(gè)列表控件也設(shè)置為全局變量,然后在爬蟲中用text.insert()插入數(shù)據(jù)。
?
差點(diǎn)忘了打包了,需要用到pyinstaller,沒有安裝的話就 :pip install pyinstaller
然后cmd到需要打包的py文件的所在地,直接pyinstaller test.py會(huì)生成兩個(gè)文件夾,dist文件夾下面有個(gè)exe執(zhí)行文件,可以發(fā)送給別的電腦了。
?
?
?
總結(jié)
以上是生活随笔為你收集整理的python3 爬虫实战:为爬虫添加 GUI 图像界面 之 tkinter的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ELK 日志系统
- 下一篇: Python 爬虫学习 系列教程