最近突然想到是不是可以拿來做個桌面小工具品嚣,于是花了一個下午加一晚上,折騰了一下钧大。
- 運(yùn)行平臺:Windows
- Python版本:Python3.6
- IDE:Sublime Text
- 其他:Chrome瀏覽器
簡述流程為:
步驟1:用Python實(shí)現(xiàn)爬蟲爬取http://www.kuakao.com/english/ch/39183.html這個網(wǎng)頁上的單詞并存入MySQL數(shù)據(jù)庫翰撑;
步驟2:再用另一個爬蟲爬取http://www.iciba.com/,實(shí)現(xiàn)通過單詞或詞義查詢單詞啊央;
步驟3:用Python tkinter實(shí)現(xiàn)程序窗口眶诈,使其具備在線翻譯和本地翻譯兩個功能涨醋;
步驟4:連接數(shù)據(jù)庫,實(shí)現(xiàn)根據(jù)單詞或詞義的本地查詢逝撬;
步驟5:將MySQL的連接所需參數(shù)寫入配置文件浴骂,實(shí)現(xiàn)配置文件的讀取。
首先我們使用Chrome瀏覽器看下我們要爬取考研單詞的網(wǎng)頁宪潮,和之前一樣簡單看下結(jié)構(gòu)溯警。
結(jié)構(gòu)不是很復(fù)雜坎炼,所以我們和以前一樣使用請求網(wǎng)頁—解析網(wǎng)頁——存儲單詞的過程來就
這里唯一有所不同的是就是我這次插入的數(shù)據(jù)庫選擇的是MySQL,所以會之前有一點(diǎn)不同。如下所示:
連接數(shù)據(jù)庫時(shí)我讀取了配置文件里的參數(shù)檩淋,所以沒有直接給出,下面再介紹相關(guān)配置與讀取配置萄金。在MySQL中蟀悦,連接好數(shù)據(jù)庫后,我們首先獲取一個游標(biāo)氧敢,然后寫上sql插入語句:
INSERT INTO 英文詞匯.詞匯 (序號, 單詞, 詞義) VALUES (%s, %s, %s)
當(dāng)然在插入之前日戈,需要創(chuàng)建一個數(shù)據(jù)庫和數(shù)據(jù)表,并設(shè)置好字段類型等孙乖。這個簡單的sql語句就是將爬取下來的單詞插入到英文詞匯數(shù)據(jù)庫中詞匯表中浙炼,然后在執(zhí)行sql語句即可,最后需要提交修改唯袄。
由于單詞不在一個網(wǎng)頁上弯屈,所以我們還需要一個循環(huán),構(gòu)建url恋拷,遍歷所有單詞頁面
來看下數(shù)據(jù)庫里的詞匯情況:
接下來我們來看下配置文件及讀取部分蔬顾。
spider.conf
這個配置文件里寫的是連接MySQL的一些參數(shù),包括主機(jī)名诀豁、端口窄刘、用戶、密碼等舷胜。
再來看下如何讀取娩践,讀取配置文件是通過Python自帶的configparser模塊。
定義一個SpiderConfi類欺矫,然后定義相關(guān)變量纱新。再通過load_conf方法讀取配置文件,讀取方式很簡單,先建立一個ConfigParse對象穆趴,然后讀取配置文件的名稱脸爱,最后通過get方法讀取參數(shù)即可,這里需要注意的是端口port需要讀取成數(shù)字未妹,而不是字符串簿废,所以使用getint方法。最后我使用了日志模塊络它,用于確認(rèn)是否正確讀取族檬。
最后調(diào)用方法化戳,看下執(zhí)行結(jié)果吧单料。
第二步用來實(shí)現(xiàn)在線翻譯的功能的爬蟲即之前介紹過的爬取金山翻譯点楼,這里就不再多說了扫尖。直接來看如何實(shí)現(xiàn)桌面窗口吧。
這里我使用的Python自帶的tkinter模塊,簡單的做了個界面掠廓。
相關(guān)具體的方法參數(shù)大家可以參考官網(wǎng):tkinter,這里就不再多說啦。主要就是定義窗口標(biāo)簽控件以及布局蟀瞧。實(shí)現(xiàn)窗口是這樣的:
兩個按鈕綁定不同的方法,分別是:
cmd1是在線翻譯铸屉,直接執(zhí)行了其中的一個方法獲取金山翻譯的釋義,cmd2是調(diào)用了接下來要講的WordRetriever類塞关,然后再執(zhí)行查詞的方法抬探,接著往下看吧子巾!
check_word方法首先將result_text標(biāo)簽里的數(shù)據(jù)清空,然后再獲取輸入到text_entry里的單詞或詞義线梗,之后連接好數(shù)據(jù)庫椰于。
連接好數(shù)據(jù)庫之后仪搔,就可以執(zhí)行sql查詢了瘾婿,我將輸入到text_entry里的數(shù)據(jù)分成兩種情況,當(dāng)正則表達(dá)式匹配到漢字時(shí),證明輸入的是詞義偏陪,需要查找的是單詞抢呆,這里我們就使用MySQL的模糊查詢方法,通過%匹配符匹配數(shù)據(jù)庫中所有符合的詞義笛谦,并給出相關(guān)結(jié)果抱虐;而如果是單詞,則可以直接查詢饥脑。
最后就來試試查詢結(jié)果吧:
好了灶轰,就是這么多了寫得比較匆忙谣沸,有點(diǎn)糙,將就一下下