更新!Python文獻超級搜索工具,可關鍵詞搜索並批量下載!

文獻搜索對於廣大學子來講真的是個麻煩事 ,若是你的學校購買的論文下載權限不夠多,或者不在校園內,那就很頭痛了。幸虧,咱們有Python製做的這個論文搜索工具,簡化了咱們學習的複雜性

2020-05-28補充:已用最新的scihub提取網,目前項目可用,感謝@lisenjor的分享。javascript

2020-06-25補充:增長關鍵詞搜索,批量下載論文功能。css


請在 Python實用寶典 公衆號後臺回覆 scihub,或者前往GitHub連接下載最新源代碼:
https://github.com/Ckend/scihub-cnjava


Scihub

首先給你們介紹一下Sci-hub這個線上數據庫,這個數據庫提供了約8千萬篇科學學術論文和文章下載。由一名叫亞歷珊卓·艾爾巴金的研究生創建,她過去在哈佛大學從事研究時發現支付所須要的數百篇論文的費用實在是過高了,所以就萌生了建立這個網站,讓更多人得到知識的想法python


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

爲何咱們須要用Python工具下載

在起初,這個網站是全部人都可以訪問的,可是隨着其知名度的提高,愈來愈多的出版社盯上了他們,在2015年時被美國法院封禁後其在美國的服務器便沒法被繼續訪問,所以從那個時候開始,他們就跟出版社們打起了游擊戰github

游擊戰的缺點就是致使scihub的地址須要常常更換,因此咱們沒辦法準確地一直使用某一個地址訪問這個數據庫。固然也有一些別的方法可以讓咱們長時間訪問這個網站,好比說修改DNS,修改hosts文件,不過這些方法不只麻煩,並且也不是長久之計,仍是存在失效的可能的。數據庫

新姿式:用Python寫好的API工具超方便下載論文服務器

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

https://github.com/zaytoun/scihub.py


但因爲做者長久不更新,原始的下載工具已經沒法使用,Python實用寶典根據@lisenjor的分享,修改了源代碼的下載工具。app

請在 Python實用寶典 公衆號後臺回覆 scihub,下載最新可用代碼。

解壓下載的壓縮包後,使用CMD進入這個文件夾,輸入如下命令(默認你已經安裝好了Python)安裝依賴:

pip install -r requirements.txt

而後咱們就能夠準備開始使用啦!

這個工具使用起來很是簡單,有兩種方式,第一種方式你能夠先在 Google 學術(搜索到論文的網址便可)或ieee上找到你須要的論文,複製論文網址如:

http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=1648853

ieee文章

而後在scihub文件夾的scihub裏新建一個文件叫download.py, 輸入如下代碼:

進入該文件夾後在cmd/terminal中運行:

python download.py

你就會發現文件成功下載到你的當前目錄啦,名字爲paper.pdf若是不行,多試幾回就能夠啦,仍是不行的話,能夠在下方留言區詢問哦。

上述是第一種下載方式,第二種方式你能夠經過在知網或者百度學術上搜索論文拿到DOI號進行下載,好比:

將DOI號填入download函數中:


下載完成後就會在文件夾中出現該文獻:



2020-06-25新增:基於關鍵詞的論文批量下載

今天更新了一波接口,如今支持使用搜索的形式批量下載論文,好比說搜索關鍵詞 端午節(Dragon Boat Festival):

from scihub import SciHubsh = SciHub()
# 搜索詞keywords = "Dragon Boat Festival"# 搜索該關鍵詞相關的論文,limit爲篇數result = sh.search(keywords, limit=10)print(result)
for index, paper in enumerate(result.get("papers", [])): # 批量下載這些論文    sh.download(paper["url"], path=f"files/{keywords.replace(' ', '_')}_{index}.pdf")

運行結果,下載成功:



請注意,這部分我修改了做者源代碼裏的許多地方,要從Python實用寶典公衆號後臺回覆 scihub 下載源代碼,或者前往GitHub下載源代碼才能成功運行該功能:

https://github.com/Ckend/scihub-cn

工做原理

這個API的源代碼其實很是好讀懂

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

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

https://whereisscihub.now.sh/


惋惜的是,做者常年不維護,該地址已經失效了,咱們就是在這裏修改了該域名,使得項目得以從新正常運做:

2、對用戶輸入的論文地址進行解析,找到相應論文

1. 若是用戶輸入的連接不是直接能下載的,則使用sci-hub進行下載

2. 若是scihub的網址沒法使用則切換另外一個網址使用,除非全部網址都沒法使用。


3.值得注意的是,若是用戶輸入的是論文的關鍵詞,咱們將調用sciencedirect的接口,拿到論文地址,再使用scihub進行論文的下載。

3、下載

1. 拿到論文後,它保存到data變量中

2. 而後將data變量存儲爲文件便可


此外,代碼用到了一個retry裝飾器,這個裝飾器能夠用來進行錯誤重試,做者設定了重試次數爲10次,每次重試最大等待時間不超過1秒。

但願你們能妥善使用好此工具,不要批量下載,不然一旦網站被封,學生黨們又要哭了。

若是你在使用的過程當中發現了任何問題或者在某些功能上存在疑惑,請掃碼進入下方的Python實用寶典互助羣,羣友們都會很是熱心地幫助你的:


咱們的文章到此就結束啦,若是你但願咱們今天的文章,請持續關注咱們,若是對你有幫助,麻煩在下面點一個贊/在看哦

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

本文分享自微信公衆號 - Python實用寶典(pythondict)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索