[Python]百科搜索聚合

百科搜索聚合

概述

在大學學習過程中,常常會需要搜索一些遺忘的概念。但是從單方面,如百度百科獲取信息,有時候不足以完全理解某些概念,需要再次從維基百科中查詢相關內容。

鑑於大陸對維基百科中文的不友好,我們還需要把概念翻譯成英文後再進行搜索。

這個基於Python3.5的百科搜索聚合便是爲此而設計,你只需給出關鍵詞的中文或英文,程序便會自動爬取所需概念的概要,打印到屏幕上。

程序使用

運行Python腳本

  1. 利用集成開發環境

如Pycharm, 導入項目後運行,即可使用

  1. 在命令行窗口使用Python解釋器

Ctrl+R輸入cmd呼出命令行窗口,使用命令

cd 文件夾根目錄(baikeWiki的上一級)
py -3.5 -m baikeWiki.spiderMain



查詢方法

當運行成功後,直接輸入要搜索的關鍵詞(中文英文均可),回車,便會返回結果。

圖示:

搜索離散數學
這裏寫圖片描述



程序設計

技術路線

有道翻譯API + 第三方庫:

  1. requests
  2. BeautifulSoup
  3. re (後續版本)


基本框架

根據最終程序所需,程序分爲五大部分,分別爲:

  1. spiderMain 主函數,也可說是調度器,程序的入口,調度其他類
  2. translator 翻譯器,利用有道API翻譯關鍵詞
  3. html_downloader 下載器,下載HTML網頁
  4. html_parser 解析器,解析HTML網頁
  5. 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

個例:

  1. math ,wiki異常
  2. cat 異常

通病:

  1. wiki同義詞頁面處理
  2. 異常字符打印錯誤


改進,增加功能

  1. 增加對同義詞頁面的選擇支持

分析同義詞頁面,展現一個菜單,爲用戶提供選擇的途徑。

  1. 對百科內容的二次加工,自動生成更全面的摘要
  2. 對有道翻譯提供的內容進行處理,整合進translator

在測試中,發現翻譯諸如這類詞時,有道會返回the cat這種帶冠詞的結果,而利用這個結果進行搜索是無法搜到百科內容的。

改進方案:

  • 後期去掉the
  • 改進獲取百科頁面的途徑
    1. 打包程序,生成無序Python解釋器的exe可執行文件
    2. 更友好的GUI
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章