文献搜索对于广大学子来说真的是个麻烦事,如果你的学校购买的论文下载权限不够多,或者不在校园内,那就很头痛了。幸好,我们有Python制作的这个论文搜索工具,简化了我们学习的复杂性。
Scihub
首先给大家介绍一下sci-hub这个线上数据库,这个数据库提供了 81,600,000 篇科学学术论文和文章下载。起初由一名叫 亚历珊卓·艾尔巴金 的研究生建立,她过去在哈佛大学从事研究时发现支付所需要的数百篇论文的费用实在是太高了,因此就萌生了创建这个网站,让更多人获得知识的想法
后来,这个网站越来越出名,逐渐地在更多地国家如印度、印度尼西亚、中国、俄罗斯等国家盛行,并成功地和一些组织合作,共同维护和运营这个网站。到了2017年的时候,网站上已有81600000篇学术论文,占到了所有学术论文的69%,基本满足大部分论文的需求,而剩下的31%是研究者不想获取的论文。
为什么我们需要用Python工具下载
在起初,这个网站是所有人都能够访问的,但是随着其知名度的提升,越来越多的出版社盯上了他们,在2015年时被美国法院封禁后其在美国的服务器便无法被继续访问,因此从那个时候开始,他们就跟出版社们打起了游击战。
游击战的缺点就是导致scihub的地址需要经常更换,所以我们没办法准确地一直使用某一个地址访问这个数据库。当然也有一些别的方法可让我们长时间访问这个网站,比如说修改DNS,修改hosts文件,不过这些方法不仅麻烦,而且也不是长久之计,还是存在失效的可能的。
新姿势:用Python写好的API工具超方便下载论文
这是一个来自github的开源非官方API工具,下载地址为:
https://github.com/zaytoun/scihub.py
首先我们需要下载这个工具,将github上的项目clone下来 :
git clone https://github.com/zaytoun/scihub.py.git
或者在Clone or download按钮里下载ZIP并解压。
解压后的文件夹名称可能为scihub.py,记得改成scihub, 解压后使用CMD进入这个文件夹,输入以下命令(默认你已经安装好了Python)安装依赖:
pip install -r requirements.txt
然后我们就可以准备开始使用啦!
这个工具使用起来非常简单,你可以先在 Google 学术(搜索到论文的网址即可)或ieee上找到你需要的论文,复制论文网址如:
http://img3.imgtn.bdimg.com/it/u=664814095,2334584570&fm=11&gp=0.jpg
然后在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当前可用的域名,用于下载论文:
二、对用户输入的论文地址进行解析,找到相应论文
1. 如果用户输入的链接不是直接能下载的,则使用sci-hub进行下载
2. 如果scihub的网址无法使用则切换另一个网址使用,除非所有网址都无法使用。
三、下载
1. 拿到论文后,它保存到data变量中
2. 然后将data变量存储为文件即可
值得注意的是代码用到了一个retry装饰器,这个装饰器可以用来进行错误重试,作者设定了重试次数为10次,每次重试最大等待时间不超过1秒。
我们的文章到此就结束啦,如果你希望我们今天的文章,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!
Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典