你不得不知道的 python 超級文獻搜尋工具

pythondict發表於2020-05-06

原文來自Python實用寶典你不得不知道的python超級文獻搜尋工具

文獻搜尋對於廣大學子來說真的是個麻煩事,如果你的學校購買的論文下載許可權不夠多,或者不在校園內,那就很頭痛了。幸好,我們有Python製作的這個論文搜尋工具,簡化了我們學習的複雜性。

Scihub

首先給大家介紹一下sci-hub這個線上資料,這個資料提供了 81,600,000 篇科學學術論文和文章下載。起初由一名叫 亞歷珊卓·艾爾巴金 的研究生建立,她過去在哈佛大學從事研究時發現支付所需要的數百篇論文的費用實在是太高了,因此就萌生了建立這個網站,讓更多人獲得知識的想法。

後來,這個網站越來越出名,逐漸地在更多地國家如印度、印度尼西亞、中國、俄羅斯等國家盛行,併成功地和一些組織合作,共同維護和運營這個網站。到了2017年的時候,網站上已有81600000篇學術論文,佔到了所有學術論文的69%,基本滿足大部分論文的需求,而剩下的31%是研究者不想獲取的論文。

為什麼我們需要用Python工具下載

在起初,這個網站是所有人都能夠訪問的,但是隨著其知名度的提升,越來越多的出版社盯上了他們,在2015年時被美國法院封禁後其在美國的伺服器便無法被繼續訪問,因此從那個時候開始,他們就跟出版社們打起了游擊戰。

游擊戰的缺點就是導致scihub的地址需要經常更換,所以我們沒辦法準確地一直使用某一個地址訪問這個資料。當然也有一些別的方法可讓我們長時間訪問這個網站,比如說修改DNS,修改hosts檔案,不過這些方法不僅麻煩,而且也不是長久之計,還是存在失效的可能的。

新姿勢:用Python寫好的API工具超方便下載論文

這是一個來自github的開源非官方API工具,下載地址為:

github.com/zaytoun/scihub.py

首先我們需要下載這個工具,將github上的專案clone下來 :

git clone github.com/zaytoun/scihub.py.git

或者在Clone or download按鈕裡下載ZIP並解壓

解壓後的資料夾名稱可能為scihub.py,記得改成scihub, 解壓後使用CMD進入這個資料夾,輸入以下命令(預設你已經安裝好了Python)安裝依賴:

pip install -r requirements.txt

然後我們就可以準備開始使用啦!

這個工具使用起來非常簡單,你可以先在 Google 學術(搜尋到論文的網址即可)或ieee上找到你需要的論文,複製論文網址如:

img3.imgtn.bdimg.com/it/u=664814095...

然後在scihub資料夾的scihub裡新建一個檔案叫download.py, 輸入以下程式碼:

from scihub import SciHub

sh = SciHub()

# 第一個引數輸入論文的網站地址
# path: 檔案儲存路徑
result = sh.download('http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=1648853', path='paper.pdf')

進入該資料夾後在cmd/terminal中執行:

python download.py

你就會發現檔案成功下載到你的當前目錄啦,名字為paper.pdf,如果不行,多試幾次就可以啦,還是不行的話,可以在下方留言區詢問哦。

當然了,這個api工具還有許多功能,比如批量下載利用google學術關鍵詞搜尋到的論文,這些功能都有待大家去慢慢發掘哦:

from scihub import SciHub

sh = SciHub()

# 獲取在谷歌學術上 'bittorrent' 關鍵詞的5篇文章
results = sh.search('bittorrent', 5)

# 下載論文,有需要的話會呼叫scihub
for paper in results['papers']:
 sh.download(paper['url'])

工作原理

這個API的原始碼其實非常好讀懂。

一、找到sci-hub目前可用的域名

首先它會在這個網址裡找到sci-hub當前可用的域名,用於下載論文:

whereisscihub.now.sh/

二、對使用者輸入的論文地址進行解析,找到相應論文

  1. 如果使用者輸入的連結不是直接能下載的,則使用sci-hub進行下載

  2. 如果scihub的網址無法使用則切換另一個網址使用,除非所有網址都無法使用。

三、下載

  1. 拿到論文後,它儲存到data變數中

  2. 然後將data變數儲存為檔案即可

值得注意的是程式碼用到了一個retry裝飾器,這個裝飾器可以用來進行錯誤重試,作者設定了重試次數為10次,每次重試最大等待時間不超過1秒。

我們的文章到此就結束啦,如果你希望我們今天的文章,請持續關注我們,如果對你有幫助,麻煩在下面點一個贊/在看哦有任何問題都可以在下方留言區留言,我們都會耐心解答的!


​Python實用寶典 (pythondict.com)
不只是一個寶典
歡迎關注公眾號:Python實用寶典

本作品採用《CC 協議》,轉載必須註明作者和本文連結

Python實用寶典, pythondict.com

相關文章