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

这样:

和这样的:

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

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

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

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

代码如下:

import os
import re
from urllib.request import urlretrieve
import ssl from urllib import request
opener = request.build_opener()
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')])
request.install_opener(opener) # 关闭证书验证,方便下载
ssl._create_default_https_context = ssl._create_unverified_context
# md根路径
ori_path=r'D:\User\Weiming\Desktop\conference_publication'
pattern = re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+') # 网页地址匹配模式
listdir=os.listdir(ori_path)
# print(listdir)
# 文章名和网页地址
paper_title=''
pdf_path=''
# 文献保存路径
save_dir=r'D:\User\Weiming\Desktop\conference paper'
# 可访问的地址
access_strings=['aaai.org','dl.acm.org','playbiqdata','pasinit','platanios','muhaochen.github.io',
'arxiv.org','openreview.net','proceedings.mlr.press','semantic-web-journal.net','aidanhogan.com'] # 保存下载失败的地址
fail_file=os.path.join(save_dir,'fail_down.txt')
for son_path in listdir: # 遍历每个会议文件夹
new_dir=os.path.join(ori_path,son_path) # 生成会议文件夹路径
# print('会议文件夹路径:',new_dir)
son_listdir=os.listdir(os.path.join(ori_path,son_path)) # 会议文件夹下文章文件夹数组
# print('会议文章:',son_listdir) for new_son_path in son_listdir: # 遍历 每个会议文件夹下,每个文章文件夹
if new_son_path != 'README.md': # 不访问会议文件夹下的README.md文件
file_dir = os.path.join(new_dir, new_son_path) # 生成文章文件夹路径
print('文章文件夹路径:',file_dir)
file_name=os.listdir(file_dir) # 获取README文件名称,发现有一些文件命名不是很统一
# print(file_name)
# print(len(file_name))
# 如果不是一个文件,理论上是一个md文件
if len(file_name)>1:
print('该文件夹下不止一个文件?',file_dir)
# 如果文件夹下没有md文件
if len(file_name)==0:
print('该文件夹下没有文件:',file_dir)
continue
md_file = os.path.join(file_dir, file_name[0])
# print('文章README文件路径:',md_file)
f=open(md_file,encoding='utf-8')
for line in f:
# print(line)
if '# ' in line:
paper_title=line[2:]
print('Paper Title: ',paper_title) # 打印一下文章名
if '**pdf**' in line:
url = re.findall(pattern, line)
pdf_path=url[0][:-1]
print('PDF DownPath: ',pdf_path) # 匹配到的第一个字符串,去除最后面的 )
exist=0
for sub_string in access_strings:
if sub_string in pdf_path:
exist=1
if exist==1:
paper_title=paper_title.rstrip()
paper_title=paper_title.replace('\n','')
paper_title=paper_title.replace(':','_').replace('?','_').replace('!','_').replace('/','_')
save_file_path=save_dir+'\\'+str(son_path)+'_'+paper_title+'.pdf'
# 判断文件是否存在:
if os.path.exists(save_file_path) == True:
print('已存在')
continue
request.urlretrieve(pdf_path,save_file_path) # 请求下载
else:
print('下载失败...')
print(paper_title,' ',pdf_path)
failop = open(fail_file, 'a', encoding='utf-8')
failop.write(paper_title.replace('\n',''))
failop.write('\n')
failop.write(pdf_path)
failop.write('\n')
failop.write('\n')
failop.close()
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. disruptor笔记之四:事件消费知识点小结

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. MySQL高可用架构-MMM、MHA、MGR、PXC

    主从复制如何工作 在主库把数据记录到binlog(二进制日志). 备库开IO线程把binlog复制到自己的relaylog(中继日志). 备库读取中继日志,重放到备库上. 半同步复制 半同步复制可以确 ...

  3. DIVIDEMIX: LEARNING WITH NOISY LABELS AS SEMI-SUPERVISED LEARNING

    论文阅读: DIVIDEMIX: LEARNING WITH NOISY LABELS AS SEMI-SUPERVISED LEARNING 作者说明 版权声明:本文为博主原创文章,遵循CC 4.0 ...

  4. logback日志入门超级详细讲解

    基本信息 日志:就是能够准确无误地把系统在运行状态中所发生的情况描述出来(连接超时.用户操作.异常抛出等等): 日志框架:就是集成能够将日志信息统一规范后输出的工具包. Logback优势 Logba ...

  5. VulnHub 实战靶场Breach-1.0

    相比于CTF题目,Vulnhub的靶场更贴近于实际一些,而且更加综合考察了知识.在这里记录以下打这个靶场的过程和心得. 测试环境 Kali linux IP:192.168.110.128 Breac ...

  6. 从零入门 Serverless | 在线应用的 Serverless 实践

    作者 | 唐慧芬(黛忻) 阿里云产品专家 导读:毫无疑问,Serverless 能够在效率和成本上给用户带来巨大收益.那具体到落地又应该怎么做呢?本文就给大家详细解读 Serverless 的落地实践 ...

  7. 从零到熟悉,带你掌握Python len() 函数的使用

    摘要:本文为你带来如何找到长度内置数据类型的使用len() 使用len()与第三方数据类型 提供用于支持len()与用户定义的类. 本文分享自华为云社区<在 Python 中使用 len() 函 ...

  8. 最详细的Android SDK下载安装及配置教程-------全文均为引用

    <https://www.cnblogs.com/gufengchen/p/11038029.html>

  9. Python在Linux下编译安装报错:Makefile:1141:install

    正常情况下执行:./configuremake && make install可以直接安装python,但是在在更新了乌版图后居然报错了!!!检查了一圈,发现乌版图安装了python3 ...

  10. 【Spring】重新认识 IoC

    前言 IoC (Inversion of control) 并不是Spring特有的概念. IoC 维基百科的解释: In software engineering, inversion of con ...