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

这样:

和这样的:

我大概看了一下,可能有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. 鸿蒙内核源码分析(编译脚本篇) | 如何防编译环境中的牛皮癣 | 百篇博客分析OpenHarmony源码 | v58.01

    百篇博客系列篇.本篇为: v58.xx 鸿蒙内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单 | 51.c.h.o 本篇用两个脚本完成鸿蒙(L1)的编译环境安装/源码下载/编译过程,让编译,调试鸿 ...

  2. YbtOJ#532-往事之树【广义SAM,线段树合并】

    正题 题目链接:https://www.ybtoj.com.cn/problem/532 题目大意 给出\(n\)个点的一个\(Trie\)树,定义\(S_x\)表示节点\(x\)代表的字符串 求$$ ...

  3. P4457-[BJOI2018]治疗之雨【期望dp,高斯消元】

    正题 题目链接:https://www.luogu.com.cn/problem/P4457 题目大意 开始一个人最大生命值为\(n\),剩余\(hp\)点生命,然后每个时刻如果生命值没有满那么有\( ...

  4. Kubernetes集群(RKE)安装ArgoCD排坑

    Photo by Pixabay from Pexels Argo CD是一个声明式的,基于Kubernetes的GitOps持续交付工具.更多的细节参考 ArgoCD官网 的说明,这里记录了一些实践 ...

  5. nginx禁止IP访问系统

    server { listen 80 default; server_name _; if ($host ~ "\d+\.\d+\.\d+\.\d") { return 404; ...

  6. Markdown语法熟悉

    ==(1)标题== # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 ==(2)字体== **加粗** *斜体* ***斜体加粗*** ...

  7. 内网渗透DC-2靶场通关(CTF)

    为了更好的阅读体验,请在pc端打开我的个人博客 DC系列共9个靶场,本次来试玩一下DC-2,共有5个flag,下载地址. 下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware ...

  8. 八大排序算法之基数排序(python实现)

    [写在前面] 参考文章: https://blog.csdn.net/nrsc272420199/article/details/82691596[给出的示例图,简单易懂,但是对于没一轮循环没有讲解的 ...

  9. 错误 Unresolved reference 'AF_INET' 解决办法

    错误代码如下: import socketserer_socket = socket.socket(AF_INET, SOCK_DGAM) 错误信息: 原因分析: 1.AF_INET,SOCK_DGA ...

  10. rocketmq优雅停机往事

    1 时间追溯到2018年12月的某一天夜晚,那天我正准备上线一个需求完就回家,刚点下发布按钮,告警就响起,我擦,难道回不了家了?看着报错量只有一两个,断定只是偶发,稳住不要慌. 把剩下的机器发完,又出 ...