你不得不知道的python超级文献搜索工具-Python 实用宝典

你不得不知道的python超级文献搜索工具

文献搜索对于广大学子来说真的是个麻烦事,如果你的学校购买的论文下载权限不够多,或者不在校园内,那就很头痛了。幸好,我们有Python制作的这个论文搜索工具,简化了我们学习的复杂性

2020-05-28 补充:已用最新的scihub提取网,目前项目可用,感谢@lisenjor的分享。另外分享一个可用下载地址:https://sci-hub.shop/

2020-06-25 补充:增加关键词搜索批量下载论文功能。

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

但由于作者长久不更新,原始的下载工具已经无法使用,Python实用宝典根据@lisenjor的分享,修改了源代码的下载工具。

请在 Python实用宝典 公众号后台回复 scihub,下载最新可用代码。

解压后使用CMD进入这个文件夹,输入以下命令(默认你已经安装好了Python)安装依赖:

pip install -r requirements.txt

然后我们就可以准备开始使用啦!

这个工具使用起来非常简单,你可以先在 Google 学术(搜索到论文的网址即可)或ieee上找到你需要的论文,复制论文网址如:

http://img3.imgtn.bdimg.com/it/u=664814095,2334584570&fm=11&gp=0.jpg

ieee文章

然后在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如果不行,多试几次就可以啦,还是不行的话,可以在下方留言区询问哦。

上述是第一种下载方式,第二种方式你可以通过在知网或者百度学术上搜索论文拿到DOI号进行下载,比如:

from scihub import SciHub
sh = SciHub()
result = sh.download('10.1016/j.compeleceng.2020.106640', path='paper2.pdf')

下载完成后就会在文件夹中出现该文献:

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实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python 实用宝典 作者:Python实用宝典 发表,其版权均为 Python 实用宝典 所有,文章内容系作者个人观点,不代表 Python 实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
39
Python实用宝典python_zhl

评论:

27 条评论,访客:0 条,站长:0 条

100%好评

  • 好评:(100%)
  • 中评:(0%)
  • 差评:(0%)

最新评论

  1. 徐某人
    徐某人发布于: 

    cannot import name ‘SciHub’
    为什么我IMPROT 不了呀?

  2. 迷途的小牛
    迷途的小牛发布于: 

    为啥批量下载没有反应呢?就是把download.py换成下面的没用啊
    from scihub import SciHub

    sh = SciHub()

    # 获取在谷歌学术上 ‘bittorrent’ 关键词的5篇文章
    results = sh.search(‘bittorrent’, 5)

    # 下载论文,有需要的话会调用scihub
    for paper in results[‘papers’]:
    sh.download(paper[‘url’])

    • Python实用宝典
      Python实用宝典发布于: 

      用CMD进入该文件夹中,然后输入 python download.py 命令,看看提示什么

  3. LL
    LL发布于: 

    输入pip install -r requirements.txt直接报错闪退了,这怎么解决

    • Python实用宝典
      Python实用宝典发布于: 

      WIN+R,输入cmd进入cmd,然后cd到你的文件夹目录,输入这条命令,看看报什么错。

  4. python小小白
    python小小白发布于: 

    运行download.py后,显示scihub.py中第43行出现list index out of range问题,怎么解决?

  5. Lele1357
    Lele1357发布于: 
    评分:

    太有用啦~

  6. Dorothy
    Dorothy发布于: 

    File “E:\python\scihub\scihub\scihub.py”, line 43, in __init__
    self.base_url = self.available_base_url_list[0] + ‘/’
    IndexError: list index out of range
    报错了

  7. lisenjor
    lisenjor发布于: 

    可是我尝试把源代码中的网址换成这个,甚至是直接把几个可用网址用列表列出来,不报错了,但是下载没反应

    • Python实用宝典
      Python实用宝典发布于: 

      是的,源代码中包含了提取可用链接的部分,可能是提取出来的链接不正确,你可以在相关下载代码前DEBUG一下或者print下载链接,看看正不正确。

  8. Yao
    Yao发布于: 
    评分:

    请问怎样把源代码中的sciencedirect换成NCBI呢

  9. Yao
    Yao发布于: 

    谢谢您,但是我将源代码中两条链接更换后运行脚本会报错

  10. 小白
    小白发布于: 

    请问 为什么我运行的时候,显示can’t find download.py 呢?

    • Python实用宝典
      Python实用宝典发布于: 

      和终端目前所在的文件夹有关,要在scihub文件夹下运行命令

  11. Leo
    Leo发布于: 

    安装依赖pip install -r requirements.txt 的时候报错,
    ERROR:Could not find aversion that satisfies the requirement beautifulsoup 4(from -r requirement. txt (line 1)

  12. Leo
    Leo发布于: 

    谢谢及时的回复,之前由于是在手机上输入,多打了一个空格,具体出现的错误如下,ERROR: Could not find a version that satisfies the requirement beautifulsoup4 (from -r requirements.txt (line 1)) (from versions: none)
    ERROR: No matching distribution found for beautifulsoup4 (from -r requirements.txt (line 1))。这样该周末解决呢?

    • Python实用宝典
      Python实用宝典发布于: 

      先试一下升级pip:
      pip install –upgrade pip
      再试试:
      pip install beautifulsoup4
      如果不行可以按照bs4:
      pip install bs4

    • Python实用宝典
      Python实用宝典发布于: 

      先试一下升级pip:
      pip install –upgrade pip
      再试试:
      pip install beautifulsoup4
      如果不行可以安装bs4:
      pip install bs4

发表评论