

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源创计划”,欢迎正在阅读的你也加入,一块儿分享。