python3 爬蟲實戰:為爬蟲新增 GUI 影象介面

擒賊先擒王發表於2020-03-06

 

From:https://blog.csdn.net/Fan_shui/article/details/81611752

 

 

一、前言

 

  前面我們寫的爬蟲只能執行在具有python環境的電腦上,若是把原始碼發給別人,很大可能性是執行不了的,所以我們本節的目的是為爬蟲建立 GUI 介面,並打包成exe可執行檔案。

知乎:https://zhuanlan.zhihu.com/p/41866570

 

 

二、學習知識點

 

tkinter:tkinter 是 python 內建的模組,不用安裝,可直接匯入

tkinter的學習是參考b站的一個 python gui 介面設計的視訊 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():

    #建立空白視窗,作為主載體
    root = Tk()
    root.title('python')
    #顯示視窗
    mainloop()

main()

執行後產生下圖:

接下來設定視窗大小:root.geometry('600x300+398+279')

這個418x200可以通過qq的截圖工具得到,截圖的時候會有個資料一直在動,就是距離螢幕左上角的距離,後面的+398+279是顯示的是視窗在整個螢幕的位置

然後我們新增標籤控制元件

#標籤控制元件,視窗中放置文字元件
Label(root,text='請輸入下載的url:',font=("華文行楷",15),fg='black').grid()

控制元件的第一個引數基本都是我們的主載體,因為標籤是包含在我們的父載體下的。後面的grid是定位,定位有三種,grid,place,pack,其中grid是網格式的定位,如下圖:

圖中的(0,0)表示0行h0列,(0,1)表示0行第二列。網格式定位的意思是說那些框架是按照圖中的表格放置的,上面程式碼中grid中沒有傳入引數,預設為(0,0),即放在0行0列,效果如下圖

接下來我們放個輸入url的輸入框

#Entry是可輸入文字框
url_input=Entry(root,font=("微軟雅黑",15),width=50)
url_input.grid(row=0,column=1)

grid這次定位在0行1列,與上一個標籤控制元件在同一行。

下面我們增加個顯示輸出的控制元件,我們採用列表控制元件

#列表控制元件
text=Listbox(root,font=('微軟雅黑',15),width=45,height=10)
#columnspan 元件所跨越的列數
text.grid(row=1,columnspan=2)

columnspan表示合併兩個列

下面我們再新增兩個按鈕
設定按鈕 sticky對齊方式,N S W E

button = Button(root,text='開始下載',font=("微軟雅黑",15),command=Crawl_content).grid(row=2,column=0,sticky=W) 
button = Button(root,text='退出',font=("微軟雅黑",15),command=root.quit).grid(row=2,column=1,sticky=E)

其中第一個按鈕中新增了command,點選這個按鈕時,就會呼叫Crawl_content這個函式(現在還沒有寫這個函式,先去掉),後面的grid中新增了sticky=W,sitcky是對齊方式,第二個botton主要是退出GUI介面

from tkinter import *


def main():
    global url_input, text
    # 建立空白視窗,作為主載體 
    root = Tk()
    root.title('測試——貓眼電影')

    # 視窗的大小,後面的加號是視窗在整個螢幕的位置 
    root.geometry('550x400+398+279')

    # 標籤控制元件,視窗中放置文字元件 
    Label(root, text='請輸入下載的url:', font=("華文行楷", 20), fg='black').grid()

    # 定位 pack包 place位置 grid是網格式的佈局 #Entry是可輸入文字框 
    url_input = Entry(root, font=("微軟雅黑", 15))
    url_input.grid(row=0, column=1)

    # 列表控制元件 
    text = Listbox(root, font=('微軟雅黑', 15), width=45, height=10)

    # columnspan 元件所跨越的列數 
    text.grid(row=1, columnspan=2)

    # 設定按鈕 sticky對齊方式,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()

現在介面已經做好了,本節主要是介紹介面設計,爬蟲的內容具體不再介紹,是個非常簡單的小爬蟲

from tkinter import *
import requests
import os
from bs4 import BeautifulSoup
from pyquery import PyQuery as pq
import csv

os.chdir('E:\爬蟲資料')


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' % i
        print('在解析網址中:', new_url)
        req = requests.get(url=new_url, headers=headers)
        html = req.text
        doc = pq(html)
        items = doc('dl.board-wrapper dd').items()

        for each in items:
            title = each.find('a').text()
            # 新增資料 
            text.insert(END, title)
            # 文字框向下滾動 
            text.see(END)
            # 更新 
            text.update()
            print('已抓取完畢')


def main():
    global url_input, text
    # 建立空白視窗,作為主載體 
    root = Tk()
    root.title('測試——貓眼電影')

    # 視窗的大小,後面的加號是視窗在整個螢幕的位置 
    root.geometry('550x400+398+279')

    # 標籤控制元件,視窗中放置文字元件 
    Label(root, text='請輸入下載的url:', font=("華文行楷", 20), fg='black').grid()

    # 定位 pack包 place位置 grid是網格式的佈局 #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 元件所跨越的列數 
    text.grid(row=2, columnspan=2)

    # 設定按鈕 sticky對齊方式,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/4

url_input把它設定為全域性變數,在爬蟲抓取的時候可以通過get()獲得我們輸入的url,同樣為了讓抓取的內容顯示在我們的列表控制元件中,我們需要把text這個列表控制元件也設定為全域性變數,然後在爬蟲中用text.insert()插入資料。

這裡寫圖片描述

 

差點忘了打包了,需要用到pyinstaller,沒有安裝的話就 :pip install pyinstaller

然後cmd到需要打包的py檔案的所在地,直接pyinstaller test.py會生成兩個資料夾,dist資料夾下面有個exe執行檔案,可以傳送給別的電腦了。

 

 

 

相關文章