本人由於英語渣,在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/ 謝謝!