百科搜索聚合
概述
在大學學習過程中,常常會需要搜索一些遺忘的概念。但是從單方面,如百度百科獲取信息,有時候不足以完全理解某些概念,需要再次從維基百科中查詢相關內容。
鑑於大陸對維基百科中文的不友好,我們還需要把概念翻譯成英文後再進行搜索。
這個基於Python3.5的百科搜索聚合便是爲此而設計,你只需給出關鍵詞的中文或英文,程序便會自動爬取所需概念的概要,打印到屏幕上。
程序使用
運行Python腳本
- 利用集成開發環境
如Pycharm, 導入項目後運行,即可使用
- 在命令行窗口使用Python解釋器
Ctrl+R
輸入cmd
呼出命令行窗口,使用命令
cd 文件夾根目錄(baikeWiki的上一級)
py -3.5 -m baikeWiki.spiderMain
查詢方法
當運行成功後,直接輸入要搜索的關鍵詞(中文英文均可),回車,便會返回結果。
圖示:
搜索離散數學
程序設計
技術路線
有道翻譯API + 第三方庫:
- requests
- BeautifulSoup
- re (後續版本)
基本框架
根據最終程序所需,程序分爲五大部分,分別爲:
spiderMain
主函數,也可說是調度器,程序的入口,調度其他類translator
翻譯器,利用有道API翻譯關鍵詞html_downloader
下載器,下載HTML網頁html_parser
解析器,解析HTML網頁html_outputer
輸出器,輸出解析後內容
程序從spiderMain
進入,用戶輸入關鍵詞,提交給translator
翻譯成英文, 中文英文提交給Url_generator
生成百度百科、維基百科鏈接提交給html_downloader
,下載下來的網頁提交給html_parser
解析,解析出百科內容後,提交給html_outputer
,一個循環結束。
流程圖如下:
SpiderMain
主要完成整個程序的調度,Url生成器在這個類中,後期可以考慮整合到html_downloader
裏面。
異常的處理:利用有道API翻譯時,網絡連接失敗會導致程序異常
YouDao(translator)
- 有道翻譯官網申請API接口
- 網上找的使用方法
- 利用中文
utf-8
編碼特性,判斷用戶輸入類型
HtmlDownloader
使用第三方庫
requests
下載HTML網頁
HtmlParser
- 使用第三方庫
BeautifulSoup
解析HTML網頁
百度百科:使用瀏覽器打開一個百科網頁,分析源代碼,發現百度百科的標題保存在一個<dd class='lemmaWgt-lemmaTitle-title'>
標籤下的h1
標籤內,而摘要保存在一個<div class='lemma-summary'>
的標籤內。
利用BeautifulSoup
提供的find()
方法找到這兩個標籤,再用.get_text()
方法獲取標籤內的字符串。最後將兩個信息存到一個字典中。
類似的,對
維基百科:我們訪問一個維基百科頁面,分析它的源代碼,發現標題保存在id=' firstHeading'
的標籤下,摘要保存在id=mw-content-text
的第一個子標籤<p>
中。
利用同樣的辦法,獲取到維基百科的標題和摘要存到字典中。
HtmlOutputer
由於我們從Parser
接受的數據是個字典,因此我們可以很方便的將數據輸出成我們喜愛的格式。
打印形式後期可以根據內容的增減進行優化。
後續版本
修復已知Bug
個例:
- math ,wiki異常
- cat 異常
通病:
- wiki同義詞頁面處理
- 異常字符打印錯誤
改進,增加功能
- 增加對同義詞頁面的選擇支持
分析同義詞頁面,展現一個菜單,爲用戶提供選擇的途徑。
- 對百科內容的二次加工,自動生成更全面的摘要
- 對有道翻譯提供的內容進行處理,整合進translator
在測試中,發現翻譯諸如貓
這類詞時,有道會返回the cat
這種帶冠詞的結果,而利用這個結果進行搜索是無法搜到百科內容的。
改進方案:
- 後期去掉
the
- 改進獲取百科頁面的途徑
…
- 打包程序,生成無序Python解釋器的
exe
可執行文件 - 更友好的GUI
- …
- 打包程序,生成無序Python解釋器的