近期师兄发给我一个压缩包让我整理文献,而我发现压缩包里的内容是这样:

这样:

和这样的:

我大概看了一下,可能有270多篇文章是这种格式,俗话说的好,没有困难的工作,只有勇敢的研究僧。所以决定用Python自己写一个脚本。

尽管这个程序还有许多不足之处:1)对于文件很大的时候会只下载一个18kb左右的无法打开文件;2)程序中间出现网络或者文件异常,没有对异常进行处理;3)因为md文件里面的pdf文章地址,有的打开是网站、有的打开可以直接下载,有的打开是pdf文件......,所以还需要人工去分一下哪一类域名下的网址可以直接下载或是pdf文件,一共可能也就20种以内,打印一下选几个关键词判断一下就行。

这个程序的主要思想:1)利用Python对文件夹和文件进行遍历;2)读取md文件内容并且根据# 标识识别文章标题,利用“pdf”和正则表达式识别出pdf下载的地址;3)使用urllib库的urlretrieve对指定网址的资源文件进行下载到指定文件夹。

结果:实现173篇文章的自动下载,并将无法下载的文章名和网址保存在相关的文件内。最后希望能够对你产生帮助,如果有帮助可以点个赞。

代码如下:

  1. import os
  2. import re
  3. from urllib.request import urlretrieve
  4. import ssl
  5.  
  6. from urllib import request
  7. opener = request.build_opener()
  8. opener.addheaders = ([('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36')])
  9. request.install_opener(opener)
  10.  
  11. # 关闭证书验证,方便下载
  12. ssl._create_default_https_context = ssl._create_unverified_context
  13. # md根路径
  14. ori_path=r'D:\User\Weiming\Desktop\conference_publication'
  15. pattern = re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+') # 网页地址匹配模式
  16. listdir=os.listdir(ori_path)
  17. # print(listdir)
  18. # 文章名和网页地址
  19. paper_title=''
  20. pdf_path=''
  21. # 文献保存路径
  22. save_dir=r'D:\User\Weiming\Desktop\conference paper'
  23. # 可访问的地址
  24. access_strings=['aaai.org','dl.acm.org','playbiqdata','pasinit','platanios','muhaochen.github.io',
  25. 'arxiv.org','openreview.net','proceedings.mlr.press','semantic-web-journal.net','aidanhogan.com']
  26.  
  27. # 保存下载失败的地址
  28. fail_file=os.path.join(save_dir,'fail_down.txt')
  29. for son_path in listdir: # 遍历每个会议文件夹
  30. new_dir=os.path.join(ori_path,son_path) # 生成会议文件夹路径
  31. # print('会议文件夹路径:',new_dir)
  32. son_listdir=os.listdir(os.path.join(ori_path,son_path)) # 会议文件夹下文章文件夹数组
  33. # print('会议文章:',son_listdir)
  34.  
  35. for new_son_path in son_listdir: # 遍历 每个会议文件夹下,每个文章文件夹
  36. if new_son_path != 'README.md': # 不访问会议文件夹下的README.md文件
  37. file_dir = os.path.join(new_dir, new_son_path) # 生成文章文件夹路径
  38. print('文章文件夹路径:',file_dir)
  39. file_name=os.listdir(file_dir) # 获取README文件名称,发现有一些文件命名不是很统一
  40. # print(file_name)
  41. # print(len(file_name))
  42. # 如果不是一个文件,理论上是一个md文件
  43. if len(file_name)>1:
  44. print('该文件夹下不止一个文件?',file_dir)
  45. # 如果文件夹下没有md文件
  46. if len(file_name)==0:
  47. print('该文件夹下没有文件:',file_dir)
  48. continue
  49. md_file = os.path.join(file_dir, file_name[0])
  50. # print('文章README文件路径:',md_file)
  51. f=open(md_file,encoding='utf-8')
  52. for line in f:
  53. # print(line)
  54. if '# ' in line:
  55. paper_title=line[2:]
  56. print('Paper Title: ',paper_title) # 打印一下文章名
  57. if '**pdf**' in line:
  58. url = re.findall(pattern, line)
  59. pdf_path=url[0][:-1]
  60. print('PDF DownPath: ',pdf_path) # 匹配到的第一个字符串,去除最后面的 )
  61. exist=0
  62. for sub_string in access_strings:
  63. if sub_string in pdf_path:
  64. exist=1
  65. if exist==1:
  66. paper_title=paper_title.rstrip()
  67. paper_title=paper_title.replace('\n','')
  68. paper_title=paper_title.replace(':','_').replace('?','_').replace('!','_').replace('/','_')
  69. save_file_path=save_dir+'\\'+str(son_path)+'_'+paper_title+'.pdf'
  70. # 判断文件是否存在:
  71. if os.path.exists(save_file_path) == True:
  72. print('已存在')
  73. continue
  74. request.urlretrieve(pdf_path,save_file_path) # 请求下载
  75. else:
  76. print('下载失败...')
  77. print(paper_title,' ',pdf_path)
  78. failop = open(fail_file, 'a', encoding='utf-8')
  79. failop.write(paper_title.replace('\n',''))
  80. failop.write('\n')
  81. failop.write(pdf_path)
  82. failop.write('\n')
  83. failop.write('\n')
  84. failop.close()
  85. f.close()

自动下载MarkDown格式会议论文的程序的更多相关文章

  1. PZISP自动下载软件运行时出现“应用程序无法启动,因为应用程序的并行配置不正确”

    在win7下以管理员身份运行“PZISP自动下载软件”时出现“应用程序无法启动,因为应用程序的并行配置不正确”时,是因为系统里面没有一些visual c++库 想一想,反正以后也要用上VS2010的, ...

  2. 在U-Boot中添加自定义命令以实现自动下载程序【转】

    本文转载自:https://gaomf.cn/2016/06/26/%E5%9C%A8U-Boot%E4%B8%AD%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9 ...

  3. Innosetup打包自动下载.net framework 动态库及替换卸载程序图标.

    在使用了一段时间微软自带的安装包打包工具后,总感觉不太顺利,于是便想着找一种更简单稳定的打包工具,这类工具其实还不少,最终经过各种考量,我们选择了 InnoSetup , 该工具是一个完全免费的Win ...

  4. ahk实现git图床自动预览以及转换markdown格式

    ahk实现git图床自动预览以及转换markdown格式 软件地址 https://gitee.com/layty/pic/tree/master/app 软件功能: 检测剪切板,如果剪切板有非文本信 ...

  5. 知网上的硕士和博士论文怎么下载pdf格式

    文献管理使用的EndNote,阅读习惯使用Drawboard,在下载硕士和博士论文时在知网上只能下载caj格式,于是就想找一种能下载pdf的方式. 知乎中有篇文章介绍的如何下载pdf的方法,很管用也很 ...

  6. [python] 1、python鼠标点击、移动事件应用——写一个自动下载百度音乐的程序

    1.问题描述: 最近百度总爱做一些破坏用户信任度的事——文库金币变券.网盘限速,吓得我赶紧想办法把存在百度云音乐中的歌曲下载到本地. http://yinyueyun.baidu.com/ 可问题是云 ...

  7. 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项.试图加载格式不正确的程序

    .NET:Microsoft Visual Studio 2010 + .NET Framework 3.5 操作系统:windows2008 R2 64 位操作系统 oracle数据库:32位的OD ...

  8. ActiveX控件打包成Cab实现浏览器自动下载安装

    前言 我们在浏览器中使用我们自己的一些OCX,或者是DLL这一类的文件,在X86的机器上需要我们手动将这些文件拷贝到Windows/System32 文件夹下面去,然后通过Dos命令regsvr32 ...

  9. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

随机推荐

  1. [转载20131024]Nginx服务器漏洞的利用和修复方法

    本文主要分为两大部分,第一部分介绍了Nginx的一些常见安全漏洞的形成原因.利用方法,并给出了相应的解决办法;第二部分介绍了Nginx安全加固时需要关注的主要内容. Nginx(发音同engine x ...

  2. P2611-[ZJOI2012]小蓝的好友【Treap,扫描线】

    正题 题目链接:https://www.luogu.com.cn/problem/P2611 题目大意 \(r*c\)的网格上有\(n\)个标记点,然后求有多少个矩形包含至少一个标记点. \(1\le ...

  3. JSP页面属性

    一.JSP指令 <%@指令名属性名=属性值 %> page指令: 定义页面是如何解析 include指令: 静态包含 taglib指令: 在页面引入标签呢库. 1.page指令属性 imp ...

  4. apiserver源码分析——启动流程

    前言 apiserver是k8s控制面的一个组件,在众多组件中唯一一个对接etcd,对外暴露http服务的形式为k8s中各种资源提供增删改查等服务.它是RESTful风格,每个资源的URI都会形如 / ...

  5. 题解 CF468C Hack it!

    题目传送门 Description 设 \(f(i)\) 表示 \(i\) 的数码只和,给出 \(a\),求出 \(l,r\) 使得 \(\sum_{i=l}^{r} f(i)\equiv 0\pmo ...

  6. 题解 「2017 山东一轮集训 Day5」苹果树

    题目传送门 题目大意 给出一个 \(n\) 个点的图,每个点都有一个权值 \(f_i\) ,如果 \(f_i=-1\) 表示 \(i\) 这个点是坏的.定义一个点是有用的当且仅当它不是坏的,并且它连的 ...

  7. C++ 与 Visual Studio 2019 和 WSL(二)

    终端 A more integrated terminal experience | Visual Studio Blog (microsoft.com) Say hello to the new V ...

  8. 想要彻底搞懂大厂是如何实现Redis高可用的?看这篇文章就够了!(1.2W字,建议收藏)

    高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...

  9. 微软Windows11安卓子系统已支持运行APK 应用(附手把手详细安装攻略)怎么安装安卓/如何安装安卓应用/支持多窗口多任务

    ​​ 10 月 21 日消息,微软博客宣称,Windows 11 上 安卓子系统运行 Android  应用程序的第一个预览版现已提供给美国 Beta 频道的 Windows 内部人员.但现在通过教程 ...

  10. 第五章第四周习题: Transformers Architecture with TensorFlow

    目录 Transformer Network Packages 1 - Positional Encoding 1.1 - Sine and Cosine Angles Exercise 1 - ge ...