我用Python开发了个SCI-HUB本地版
听说有sci-hub
桌面版,带着好奇我找了一下,还真是有的,看到他的填写输入DOI
号之后即可获取文献。一番挣扎之后,有点意思,生信也学习一段时间了,我是不是我也可以试试搞一个这样的软件呀,总结一下人家的软件可以做什么:
- 一个界面,输入DOI号的窗口
- 一个按钮,点击确定
- 多个学术按钮,但是都是指向了一个网站,之后再有链接
- 还有一个非常重要的功能打赏按钮,( ̄▽ ̄)/,有付出有赞赏嘛,用到人家软件的小伙伴还是多多给人家打赏哈。
思路:(编程思路和逻辑最重要)
1,2步骤完成核心功能,就是`sci-hub`网址+`DOI号`获得文献
下面我们用Python
试试如何实现(虽然我上本科学过C++
但是我已经几乎忘完了,不过关于编程学习的一些思考是一样的)
Python打开默认浏览器
#用Python打开默认的浏览器
import webbrowser
hub = "http://sci-hub.fun/"
webbrowser.open(hub)
网址用默认浏览器打开成功了
观察sci-hub
网址的规律,以一篇2019cell为例子
#测试一下代码
doi = "10.1016/j.cell.2018.11.046" # 注意上一步的hub必须要末尾的 `/`
paper = hub + doi
#字符串的拼接
webbrowser.open(paper)
运行成功了,此处不再贴图了
批量下载
我们检索文献一般不只是一篇,这时候呢我们就可以用循环来实现。
import webbrowser
hub = "http://sci-hub.fun/"
print("Please enter DOI")
while(True):
doi = input()
paper = hub+doi
webbrowser.open(paper)
封装为可执行程序
上面的代码完成了核心功能,那如果没有安装Python的环境如何使用呢?
这里就用到了PyInstaller
(http://www.pyinstaller.org/),把Python程序`py`文件可以封装为`exe`可执行文件。
说实话不好安装,依赖问题总是报错,但是可以先下载,再手动安装,缺啥包安装什么包,需要一点耐心。
安装完后,我们就可以把py
文件封装为exe了,在windows下打开控制台,输入命令,查看帮助文档。
pyinstaller -h
可以生产exe,也可以生产mac下的可执行文件。
将之前写好的这个程序的“核心代码”另存为scihub.py
,在控制台执行 pyinstaller scihub2.py
。
生成文件如下
完成后如下图,生成的一系列文件文件
在dist
-> hubsci2
->hubsci2.exe
即可
现在这个程序不能使用复制粘贴Ctrl+V
, 添加一句完善代码,如下
再用pyinstaller
生成exe
即可 (后台回复 sci-hub 获取)
这还只是简单的功能实现,还并没有完善,比如sci-hub
网址更新问题,添加循环或者try
语句,核心的功能就是这样了,另一个值得思考的问题,就Python文件才几行命令,但是生成出来的整体exe却18M这样,可能效率有点低。学习的路上和大家多多交流。
- MyBatis两张表字段名相同产生的问题
- mongo 3.0 备份和还原数据库 ,及too many positional arguments错误
- AngularJs HTTP响应拦截器实现登陆、权限校验
- C# 读写App.config配置文件的方法
- Golang语言社区--Go语言基础第四节类型
- Golang语言社区--go语言编写Web程序
- Golang语言社区--Go语言基础第五节流程控制
- (14)不同基因坐标转换-生信菜鸟团博客2周年精选文章集
- (15)基因组各种版本对应关系-生信菜鸟团博客2周年精选文章集
- go 并发处理脚本
- 生信菜鸟团博客2周年精选文章集(4)NCBI数据库的几个探索
- PHP 的前世今生
- 【直播】我的基因组49:Y染色体的SNV不能用常规流程来找?
- 【直播】我的基因组46:SNV突变(96种)频谱的制作
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法