文献搜索对于广大学子来说真的是个麻烦事,如果你的学校购买的论文下载权限不够多,或者不在校园内,那就很头痛了。幸好,我们有Python制作的这个论文搜索工具,简化了我们学习的复杂性
2020-05-28补充:已用最新的scihub提取网,目前项目可用,感谢@lisenjor的分享。
2020-06-25补充:增加关键词搜索,批量下载论文功能。
请在 Python实用宝典 公众号后台回复 scihub,或者前往GitHub链接下载最新源代码:
https://github.com/Ckend/scihub-cn
Scihub
首先给大家介绍一下Sci-hub这个线上数据库,这个数据库提供了约8千万篇科学学术论文和文章下载。由一名叫亚历珊卓·艾尔巴金的研究生建立,她过去在哈佛大学从事研究时发现支付所需要的数百篇论文的费用实在是太高了,因此就萌生了创建这个网站,让更多人获得知识的想法
后来,这个网站越来越出名,逐渐地在更多地国家如印度、印度尼西亚、中国、俄罗斯等国家盛行,并成功地和一些组织合作,共同维护和运营这个网站。到了2017年的时候,网站上已有81600000篇学术论文,占到了所有学术论文的69%,基本满足大部分论文的需求,而剩下的31%是研究者不想获取的论文。
为什么我们需要用Python工具下载
在起初,这个网站是所有人都能够访问的,但是随着其知名度的提升,越来越多的出版社盯上了他们,在2015年时被美国法院封禁后其在美国的服务器便无法被继续访问,因此从那个时候开始,他们就跟出版社们打起了游击战
游击战的缺点就是导致scihub的地址需要经常更换,所以我们没办法准确地一直使用某一个地址访问这个数据库。当然也有一些别的方法可让我们长时间访问这个网站,比如说修改DNS,修改hosts文件,不过这些方法不仅麻烦,而且也不是长久之计,还是存在失效的可能的。
新姿势:用Python写好的API工具超方便下载论文
这是一个来自github的开源非官方API工具,下载地址为:
https://github.com/zaytoun/scihub.py
但由于作者长久不更新,原始的下载工具已经无法使用,Python实用宝典根据@lisenjor的分享,修改了源代码的下载工具。
请在 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 SciHub
sh = 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的源代码其实非常好读懂
一、找到sci-hub目前可用的域名
首先它会在这个网址里找到sci-hub当前可用的域名,用于下载论文:
https://whereisscihub.now.sh/
可惜的是,作者常年不维护,该地址已经失效了,我们就是在这里修改了该域名,使得项目得以重新正常运作:
二、对用户输入的论文地址进行解析,找到相应论文
1. 如果用户输入的链接不是直接能下载的,则使用sci-hub进行下载
2. 如果scihub的网址无法使用则切换另一个网址使用,除非所有网址都无法使用。
3.值得注意的是,如果用户输入的是论文的关键词,我们将调用sciencedirect的接口,拿到论文地址,再使用scihub进行论文的下载。
三、下载
1. 拿到论文后,它保存到data变量中
2. 然后将data变量存储为文件即可
此外,代码用到了一个retry装饰器,这个装饰器可以用来进行错误重试,作者设定了重试次数为10次,每次重试最大等待时间不超过1秒。
希望大家能妥善使用好此工具,不要批量下载,否则一旦网站被封,学生党们又要哭了。
如果你在使用的过程中发现了任何问题或者在某些功能上存在疑惑,请扫码进入下方的Python实用宝典互助群,群友们都会非常热心地帮助你的:
我们的文章到此就结束啦,如果你希望我们今天的文章,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦
Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典