基于python对doi号进行pubmed中的文献下载

文档准备

1.构建你的检索式,以AD为例,搜索出的结果选择
2.创建文档

代码展示

import requests
import re
import os
import urllib.request
import openpyxl# headers 保持与服务器的会话连接
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36',
}

headers 获取

'''
根据doi,找到文献的pdf,然后下载到本地
'''def getPaperPdf(url):pattern = '/.*?\.pdf'content = requests.get(url, headers=headers)download_url = re.findall(pattern, content.text)# print(download_url)download_url[1] = "https:" + download_url[1]print(download_url[1])path = r"papers"if os.path.exists(path):passelse:os.makedirs(path)# 使用 urllib.request 来包装请求req = urllib.request.Request(download_url[1], headers=headers)# 使用 urllib.request 模块中的 urlopen方法获取页面u = urllib.request.urlopen(req, timeout=5)file_name = download_url[1].split('/')[-2] + '%' + download_url[1].split('/')[-1]f = open(path + '/' + file_name, 'wb')block_sz = 8192while True:buffer = u.read(block_sz)if not buffer:breakf.write(buffer)f.close()print("Sucessful to download" + " " + file_name)'''
将表格放在代码保存和运行的路径内,将wb变量内的'***.xlsx'改为自己的excel文件名,
最后下载的论文在该路径下新建的papers文件夹内
'''
wb = openpyxl.load_workbook('D:\pythonProject\doi.xlsx')
# doi在sheet1中
Sheet1 = wb['Sheet1']
# 读取第*列(doi号在的那一列)'''
修改代码内,excel中doi所在列,比如在k列,所以col_range变量后面的字符改为‘k’
'''
col_range = Sheet1['K']
# 也可以读取其中的第几行:row_range = sheet1[2:6]
fails = []     #应该在搜索查询打印到一个.txt文件中


从pubmed下载下来的CSV格式文档另存为python文件目录下的.xlsx格式,第K行就是doi号了

下面通过sci-hub进行下载

for col in col_range:  # 打印dio列单元格中的值内容doi = col.valueprint(doi)if __name__ == '__main__':sci_Hub_Url = "https://sci-hub.ren/"paper_url = sci_Hub_Url + doiprint(paper_url)nmm = 0try:getPaperPdf(paper_url)        # 通过文献的url下载pdfcontinueexcept Exception:nmm = 1print("Failed to get pdf 1")if nmm == 1:try:sci_Hub_Url_2 = "https://sci-hub.se/"paper_url_2 = sci_Hub_Url_2 + doigetPaperPdf(paper_url_2)continueexcept Exception:print("Failed to get pdf 2")

记得下载之前先登录一下sci-hub网站进行测试,如果打不开请更新最新的sci-hub网址

最后获取下载失败文献的doi号

# 获取下载失败的doi
print(fails)

因为是通过sci-hub进行下载的所以代码运行结束会有很多无法下载的doi号
又无法通过pubmed官网进行爬取,
所以只能手动检测一遍,输入到pubmed上进行下载获取。

最后完整代码为

import requests
import re
import os
import urllib.request
import openpyxl# headers 保持与服务器的会话连接
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/536.36',
}'''
根据doi,找到文献的pdf,然后下载到本地
'''def getPaperPdf(url):pattern = '/.*?\.pdf'content = requests.get(url, headers=headers)download_url = re.findall(pattern, content.text)# print(download_url)download_url[1] = "https:" + download_url[1]print(download_url[1])path = r"papers"if os.path.exists(path):passelse:os.makedirs(path)# 使用 urllib.request 来包装请求req = urllib.request.Request(download_url[1], headers=headers)# 使用 urllib.request 模块中的 urlopen方法获取页面u = urllib.request.urlopen(req, timeout=5)file_name = download_url[1].split('/')[-2] + '%' + download_url[1].split('/')[-1]f = open(path + '/' + file_name, 'wb')block_sz = 8192while True:buffer = u.read(block_sz)if not buffer:breakf.write(buffer)f.close()print("Sucessful to download" + " " + file_name)'''
将表格放在代码保存和运行的路径内,将wb变量内的'***.xlsx'改为自己的excel文件名,
最后下载的论文在该路径下新建的papers文件夹内
'''
wb = openpyxl.load_workbook('D:\pythonProject\doi.xlsx')
# doi在sheet1中
Sheet1 = wb['Sheet1']
# 读取第*列(doi号在的那一列)'''
修改代码内,excel中doi所在列,比如在k列,所以col_range变量后面的字符改为了‘k’
'''
col_range = Sheet1['K']
# 也可以读取其中的第几行:row_range = sheet1[2:6]
fails = []     #应该在搜索查询打印到一个.txt文件中# 加入SCI-hub网址进行下载
for col in col_range:  # 打印dio列单元格中的值内容doi = col.valueprint(doi)if __name__ == '__main__':sci_Hub_Url = "https://sci-hub.ren/"paper_url = sci_Hub_Url + doiprint(paper_url)nmm = 0try:getPaperPdf(paper_url)        # 通过文献的url下载pdfcontinueexcept Exception:nmm = 1print("Failed to get pdf 1")if nmm == 1:try:sci_Hub_Url_2 = "https://sci-hub.se/"paper_url_2 = sci_Hub_Url_2 + doigetPaperPdf(paper_url_2)continueexcept Exception:print("Failed to get pdf 2")# if nmm == 1:#     try:#         sci_Hub_Url_3 = "https://sci-hub.st/"#         paper_url_3 = sci_Hub_Url_3 + doi#         getPaperPdf(paper_url_3)#         continue#     except Exception:#         print("Failed to get pdf 3")# if nmm == 1:#     try:#         sci_Hub_Url_4 = "https://sci-hub.shop/"#         paper_url_4 = sci_Hub_Url_4 + doi#         getPaperPdf(paper_url_4)#         continue#     except Exception:#         print("Failed to get pdf 4")# if nmm == 1:#     try:#         sci_Hub_Url_5 = "https://sci-hub.shop/"#         paper_url_5 = sci_Hub_Url_5 + doi#         getPaperPdf(paper_url_5)#         continue#     except Exception:#         print("Failed to get pdf 5")# if nmm == 1:#     try:#         sci_Hub_Url_6 = "https://libgen.ggfwzs.net/"#         paper_url_6 = sci_Hub_Url_6 + doi#         getPaperPdf(paper_url_6)#         continue#     except Exception:#         print("Failed to get pdf 6")#         fails.append(doi)# if nmm == 1:#     try:#         sci_Hub_Url_7 = "https://sci-hub.do/"#         paper_url_7 = sci_Hub_Url_7 + doi#         getPaperPdf(paper_url_7)#         continue#     except Exception:#         print("Failed to get pdf 7")
# 获取下载失败的doi
print(fails)

基于python对doi号通过sci-hub进行pubmed中的文献下载相关推荐

  1. 基于python的气象数据分析_基于python的《Hadoop权威指南》一书中气象数据下载和map reduce化数据处理及其......

    文档内容: 1:下载<hadoop权威指南>中的气象数据 2:对下载的气象数据归档整理并读取数据 3:对气象数据进行map reduce进行处理 关键词:<Hadoop权威指南> ...

  2. 基于python的公众号课堂教学_基于Python的微信公众号数据挖掘分析

    基于Python的微信公众号数据挖掘分析 华南农业大学电子工程学院 王 建 黄宁香 [期刊名称]电子世界 [年(卷),期]2019(000)011 [总页数]3 运用Python网络爬虫技术对某时事类 ...

  3. 基于python的国内外研究现状怎么写_毕业论文中的国内外研究现状怎么写啊

    毕业论文中的国内外研究现状怎么写啊以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 毕业论文指之 "国内外研究现 ...

  4. 基于python实现梯度下降法(GD)在线性回归中的应用(Boston房价预测数据集)

    [环境准备] 用到的包主要有两个:numpy和sklearn,都是机器学习常用的库. [数据集介绍] 波士顿房价数据集(Boston House Price Dataset) 使用sklearn.da ...

  5. python里叹号的用法涵义_git .gitignore中叹号的使用

    找到文档了,但是没有太看懂,请各位给讲解下 如果在不使用 "!"的情况下,gitignore里列出的文件或按通配符满足的文件将会被忽略: 如果在前面通过通配符被忽略的文件不想被忽略 ...

  6. 基于Python+Open CV的手势识别算法设计

    素材资料下载: 基于Python+OpenCV的手势识别算法设计源代码材料-机器学习文档类资源-CSDN下载采用Python的集成开发环境Pycharm进行本次课程设计,在Pycharm中进行需要库( ...

  7. 基于Python生成OPENSEES结构动画

    基于Python生成OPENSEES结构动画 ==== [Github地址]:GitHub - dinochen1983/Opensees_Python: Opensees_Python [下载实例文 ...

  8. [PyTorch] 基于python和pytorch的多项式回归

    讲解 须导入和函数库 mport torch import numpy as np from torch.autograd import Variable import torch.nn as nn ...

  9. python微信公众号文章转pdf

    python微信公众号文章转pdf 从doxc中提取链接,转换pdf https://www.bbsmax.com/A/Ae5RRb7m5Q/ import os import zipfileimpo ...

  10. 《Flask Web开发:基于Python的Web应用开发实战》笔记(原创)

    内容提要 在学习"狗书"<Flask Web开发:基于Python的Web应用开发实战>的过程中,一直遇到各种各样的坑.该书的第一部分是"Flask简介&qu ...

最新文章

  1. io获取 pcl_点云数据可视化之PCL滤波学习
  2. 洛谷P3884 二叉树问题
  3. 求一段内存中的字节型数据的和
  4. boost::log::formatting_ostream用法的测试程序
  5. ssh(Spring+Spring mvc+hibernate)——DeptController.java
  6. oracle 11gogg,【OGG】Oracle GoldenGate 11g (二) GoldenGate 11g 单向同步配置 上
  7. VS Code 大佬高效开发插件
  8. 最好用的mysql密码忘记的解决方法
  9. 使用quirksmode来简化开发
  10. Spring Boot自定义Banner
  11. 初学JAVA,开发环境的搭建(JDK和Eclipse的安装)
  12. Java中的对象都是在堆上分配的吗?
  13. 【网络学习笔记】Excel数据分析实战项目—淘宝用户画像
  14. Java工程师学习指南(完结篇)
  15. OKR教练:OKR评分,你可以这样做。
  16. 需求分析师如何做好非功能性需求
  17. 哪些情况会造成小程序违规或下架
  18. 医保支付平台项目建设方案
  19. 小程序打开速度慢是服务器原因吗,网页打开速度慢的原因以及解决方法
  20. 自然语言处理文本分析_通过自然语言处理释放文本分析的力量

热门文章

  1. 奇迹私服gs服务器端口未能连接请设置参数,奇迹私服架设之各个快捷方式参数...
  2. 教你如何修改树莓派的时区和网络对时
  3. w ndows7安不上HP1020,1020打印机驱动
  4. 如何开发网页3D游戏
  5. 简单分析minidump
  6. 新计算机 安装win2000,虚拟机安装Windows 2000超详细教程
  7. Windows 必备纯净软件
  8. 外贸询盘通开篇我的十年SEO探索路
  9. 百度万年历API(主要获取节假日和调休工作日数据)
  10. mendeley中如何重复引用同一篇参考文献_【经验分享】如何多平台同步文献 - Win / Android / IOS...