自动下载MarkDown格式会议论文的程序
近期师兄发给我一个压缩包让我整理文献,而我发现压缩包里的内容是这样:

这样:

和这样的:


我大概看了一下,可能有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格式会议论文的程序的更多相关文章
- PZISP自动下载软件运行时出现“应用程序无法启动,因为应用程序的并行配置不正确”
在win7下以管理员身份运行“PZISP自动下载软件”时出现“应用程序无法启动,因为应用程序的并行配置不正确”时,是因为系统里面没有一些visual c++库 想一想,反正以后也要用上VS2010的, ...
- 在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 ...
- Innosetup打包自动下载.net framework 动态库及替换卸载程序图标.
在使用了一段时间微软自带的安装包打包工具后,总感觉不太顺利,于是便想着找一种更简单稳定的打包工具,这类工具其实还不少,最终经过各种考量,我们选择了 InnoSetup , 该工具是一个完全免费的Win ...
- ahk实现git图床自动预览以及转换markdown格式
ahk实现git图床自动预览以及转换markdown格式 软件地址 https://gitee.com/layty/pic/tree/master/app 软件功能: 检测剪切板,如果剪切板有非文本信 ...
- 知网上的硕士和博士论文怎么下载pdf格式
文献管理使用的EndNote,阅读习惯使用Drawboard,在下载硕士和博士论文时在知网上只能下载caj格式,于是就想找一种能下载pdf的方式. 知乎中有篇文章介绍的如何下载pdf的方法,很管用也很 ...
- [python] 1、python鼠标点击、移动事件应用——写一个自动下载百度音乐的程序
1.问题描述: 最近百度总爱做一些破坏用户信任度的事——文库金币变券.网盘限速,吓得我赶紧想办法把存在百度云音乐中的歌曲下载到本地. http://yinyueyun.baidu.com/ 可问题是云 ...
- 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项.试图加载格式不正确的程序
.NET:Microsoft Visual Studio 2010 + .NET Framework 3.5 操作系统:windows2008 R2 64 位操作系统 oracle数据库:32位的OD ...
- ActiveX控件打包成Cab实现浏览器自动下载安装
前言 我们在浏览器中使用我们自己的一些OCX,或者是DLL这一类的文件,在X86的机器上需要我们手动将这些文件拷贝到Windows/System32 文件夹下面去,然后通过Dos命令regsvr32 ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
随机推荐
- Kafka 性能篇:为何 Kafka 这么快?
『码哥』的 Redis 系列文章有一篇讲透了 Redis 的性能优化 --<Redis 核心篇:唯快不破的秘密>.深入地从 IO.线程.数据结构.编码等方面剖析了 Redis " ...
- Javascript设计模式之原型模式、发布订阅模式
原型模式 原型模式用于在创建对象时,通过共享某个对象原型的属性和方法,从而达到提高性能.降低内存占用.代码复用的效果. 示例一 function Person(name) { this.name = ...
- JAVA 150道笔试题知识点整理
JAVA 笔试题 整理了几天才整理的题目,都是在笔试或者面试碰到的,好好理解消化下,对你会有帮助,祝你找工作顺利,收到满意的 offer . 1.Java 基础知识 1.1 Java SE 语法 &a ...
- VirtualBox上安装Debian10个人备忘笔记
准备 VirtualBox 下载链接:Downloads – Oracle VM VirtualBox,下载完成后安装即可. Debian 下载链接:通过 HTTP/FTP 下载 Debian CD/ ...
- Docker-初见
目录 Docker概述 Docker历史 Docker Docker的基本组成 Docker安装 使用流程 底层原理 Docker的常用命令 Portainer 可视化面板安装 镜像原理之联合文件系统 ...
- NET5 EF Core添加EF生成SQL日志记录
1.添加NuGet包:Microsoft.Extensions.Logging.Debug 2.添加单独类库用于后期维护:BCode.DataBase.Log 3.添加EFCoreLoggerProv ...
- 沟谷网络的提取及沟壑密度的计算(ArcPy实现)
一.背景 沟壑密度是描述地面被水道切割破碎程度的一个指标.沟壑密度是气候.地形.岩性.植被等因素综合影响的反映.沟壑密度越大,地面越破碎,平均坡度增大,地表物质稳定性降低,且易形成地表径流,土壤侵蚀加 ...
- 洛谷3233 HNOI2014(虚树+dp)
膜拜一发\(mts\_246,forever\_shi\) 这两位爷是真的无敌! 首先来看这个题,一看题目的数据范围和"关键点"字眼,我们就能得知这是一道虚树题 那就先一如既往的建 ...
- qsort()函数的使用
函数声明 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) 参数 ...
- css单位px,em,rem区别
在css中单位长度用的最多的是px.em.rem,这三个的区别是: px是固定的像素,一旦设置了就无法因为适应页面大小而改变. em和rem相对于px更具有灵活性,他们是相对长度单位,意思是长度不是定 ...