写在开头:
几年的 科研工作 搬砖经历,不得不和文献打交道,不论是自己读还是做成文档给别人讲,一般都会需要获取文献某些信息如题目,杂志名称,影响因子,一作,通讯以及下载文献原文等,而常规(以往的自己)的做法是,搜索 - 复制 - 粘贴 - 下载(以及 for 循环这个过程),其实很烦很枯燥很无聊很费时间(那你以前是怎么忍下来的…),应该把这部分时间节省下来做其他重要的事情,比如睡觉和发呆 +.+
最近因为工作的刚需以及加上同事的鞭策,我写了一个程序,只需要输入 DOI 就可以做到上边提到的事情,两个脚本:
- advanced_paper_informational.py, 用来在 Linux 环境下提取文献信息;
- scihub.py,用来下载文献;
1. advanced_paper_informational.py
这个脚本需要两个输入文件:
- IF_2019.txt 影响因子文件,每年都会更新,以后下载更新即可;
- J_Medline.txt,NCBI 的杂志缩写和全称对应文件;
一些软件和相应的库:
- python3 以及相应的库包括 selenium; bs4;
- PhantomJS,在 linux 用来模拟浏览器,我本来想用 chromedriver 来着,结果没有在集群上安装成功;
这些东西安装成功以后需要添加至环境变量。
成功以后你可以用单独的 DOI 或者 DOI 的文件(换行符分割)批量查询。
这个脚本的原理简述如下:根据文献的 DOI(唯一标识),使用脚本模拟浏览器去 PubMed 检索,根据检索结果提取信息即可,下边是代码:
1 | from selenium import webdriver |
2. scihub.py
写完上边这个脚本以后,我就在想:都到这一步了,为啥不临门一脚把文献下载也给搞定了呢? 于是 Google 检索了下,发现 Github 上竟然有现成的,本着不重复造轮子的偷懒精神,我就拿过来稍微改动了下,因为不是我写的,就不好意思贴代码了,改动的地方有两个:
- 代码中一个用来爬取可用的 sci-hub 的网址失效了,我替换了一个新的;
- 以及去爬这个新的网址的时候,有时候会打不开,我增加了失败后重复爬取的功能,免得需要重复运行;
这个脚本需要软件和相应的库:
- Python3 以及 requests, retrying, pysocks, bs4;
这个脚本还有利用谷歌学术查询文献的功能,不过我暂时还没用到,只用到了下载的功能,目前支持每次下载一个文献,等我后边有时间再修改一下。
下载的原理简述: 以 DOI 为例,程序得到一个 DOI 后,去寻找目前所有可用 sci-hub 网址,然后利用 sci-hub 网址 + DOI 得到相应的原文网页,如果是判断格式为 PDF 的话就直接保存。
Paper_information.sh
这个脚本用来整合的,因为不想单独运行两个脚本。
1 | !/usr/bin/bash |
参考链接
- Bioinformatics/README.md at master · Nonewood/Bioinformatics · GitHub
- scihub.py/scihub.py at master · zaytoun/scihub.py · GitHub
- Linux下Python3环境安装selenium跟phantomjs_徐代龙的技术专栏-CSDN博客_linuxpythonphantomjs
- python的retrying库处理尝试多次请求 - 简书
- 【Python3.6爬虫学习记录】(七)使用Selenium+ChromeDriver爬取知乎某问题的回答_子耶-CSDN博客_chromedriver爬知乎
- python - Selenium testing without browser - Stack Overflow
- 实战(二)轻松使用requests库和beautifulsoup爬链接 - 掘金
写在最后
- 写这个程序写得很开心 🥳;
- 脚本还很粗糙,使用过程中可能会遇到问题,后边会在 Giuhub 修改;
- 我只在 Linux 上做了测试,是可行的,其他的不一定,我有时间的话,会把非 Linux 的倒腾一下,然后放出来,不过得看时间;
- 本来还想尝试可视化,比如弄个网站或者小程序什么的,结果发现还是挺复杂的,暂时放弃,后边看情况吧;