本人由於英語渣,在linux底下經常看文檔,但是有沒有想有道詞典這種軟件,所以遇到不懂的單詞只能手動復制粘貼在網上查找,這樣就很不方便,學了python之后,就試着自己嘗試下個在命令行下查找單詞翻譯的腳本。
在我眼里,實現上面這個要求的腳本語言分幾塊完成:
一是選好一個單詞翻譯的網站,優先選擇GET方法的(代碼寫起來比較方便),如果是POST方法也不是沒有辦法,只是要自己新建一個POST請求,為此我就找到了一個用GET方法查找單詞的神器網站——在線翻譯_在線詞典_金山詞霸_愛詞霸英語,用起來就很爽。
二是把對應結果那一頁的html代碼爬下來,然后用適當的正則表達式進行匹配,把結果記錄下來。
最后就是把結果輸出到cmd中。代碼如下:
#!/usr/bin/env python #-*- coding:utf-8 -*- import urllib import sys import re from bs4 import BeautifulSoup URL = 'http://www.iciba.com/' while True: try: word = raw_input("請輸入你要查找的單詞(或者按CTRL+D或CTRL+C退出):") except KeyboardInterrupt: print "\n退出。" sys.exit(1) except EOFError: print "\n退出。" sys.exit(1) if not word: break url = URL + word #查找單詞 f = urllib.urlopen(url) reader = f.readlines() #用正則表達式進行匹配 #這里我用BeautifulSoup進行標簽的解析 soup = BeautifulSoup(''.join(reader)) #新建一個soup對象 #先進行一般釋義的抓取 results1 = soup.findAll("div",{"class":"group_pos"}) if not results1: print '不好意思,找不到你要查找的單詞' continue #對每塊進行解析 sys.stdout.write('\n') #換行 for item in results1: aa = item.findAll("strong",{"class":"fl"}) bb = item.findAll("span",{"class":"label_list"}) #二重循環 for i in range(len(aa)): print aa[i].contents[0], dd = bb[i].findAll("label") for ee in dd: print ee.contents[0], sys.stdout.write('\n') #分好行 #查找網絡釋義 results2 = soup.findAll("div",{"class":"net_paraphrase"}) print "網絡釋義:", ff = results2[0].findAll("li") for item in ff: print item.contents[0], sys.stdout.write('\n') #換行 sys.stdout.write('\n') #換行
唉,本來以為很快搞定,結果花了兩個小時,自己還是太弱了,對python還是不夠熟悉。
運行如下:
dzhwen@deng:~$ python find.py 請輸入你要查找的單詞(或者按CTRL+D或CTRL+C退出):banana n. 香蕉; 芭蕉屬植物; 喜劇演員 網絡釋義: 香蕉; 香蕉甜酒; 噴鼻蕉; 芭蕉屬植物 請輸入你要查找的單詞(或者按CTRL+D或CTRL+C退出):orange n. 桔子,橙子; [植]桔樹; 橙色; 桔色 adj. 橙色的; 橘色的; 桔紅色的 網絡釋義: 桔色; 橙色的; 桔黃; 橙 請輸入你要查找的單詞(或者按CTRL+D或CTRL+C退出): 退出。
轉載請注明出處:http://www.cnblogs.com/sysu-blackbear/ 謝謝!