python批量管理文献

本文档介绍了一种利用Zotero软件自动提取文献信息并结合Python批量重命名PDF文件的方法。首先,通过Zotero导入文献并导出信息到CSV文件。然后,使用Python读取CSV,获取每篇文献的年份、期刊和标题,生成新的文件名,并进行文件重命名。在处理过程中,需要注意处理特殊字符以及保持文件顺序的一致性,以确保正确重命名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   目前硕士搬砖,老师给了个任务,下载700篇相关文献,并且把每篇文献按照  *年份-期刊名称-文章题目* 格式来重命名,未处理之前如图:

在这里插入图片描述

处理完成之后如图:
在这里插入图片描述
对于700篇的文献整理,每一篇要依次点开,寻找对应 “年份 期刊名称 文章题目” ;这个工作量显然是灾难, 且重复操作没有营养,想写一个程序自动完成。

第一步:获取每一篇文献的相关信息。若用程序直接读取pdf文件,寻找信息是相当困难的,因为我的这700篇文献中“年份 期刊名称 文章题目”出现位置极不规律,可以说一篇一个样,随便贴两张图:
在这里插入图片描述
在这里插入图片描述
可以看出,*“年份 期刊名称 文章题目”*出现很不一样,无法通过一种固定的方法获取,在“哥们”的帮助之下,获得了一个神奇的软件:Zotero,下载链接(https://www.zotero.org/download/),把文章导入之后可以自动获得一系列信息,如图:

在这里插入图片描述
通过导入的操作,可以获得每一篇的相关信息,此软件可以将这些信息输出为.csv文件,如图:
在这里插入图片描述
第二步:从这里选择需要的信息,然后再通过python代码,就可以批量命名啦,源程序直接上:

import os,csv
path = "C:/Users/e2164\Desktop/2"+"/"  #文献文件所在位置
new_name = csv.reader(open(r'C:\Users\e2164\Desktop\wenxin.csv', encoding='utf-8'))  #导出的excel文件所在位置
New=[]
for i in new_name: #获取表格想要信息,我这里选择的是  “年份 期刊名称 文章题目“
    name=i[0]+'-'+i[1]+'-'+i[2]  #这是把这些信息整合在一起
    New.append(name)
print('导入完成')
# 获取该目录下所有文件,存入列表中
f = os.listdir(path)
print(len(f))

print(f[0])

n = 0
i = 0
j = 1
for i in f:
    # 设置旧文件名(就是路径+文件名)
    oldname = f[n]

    # 设置新文件名
    newname = New[n]+'.pdf'
    # 用os模块中的rename方法对文件改名
    try:
        os.rename(path+oldname, path+newname)
        print(oldname, '======>', newname)  #命名成功的
    except:
        os.rename(path + oldname, path + 'error'+str(j)+'.pdf')
        print(j)
        j += 1   #命名失败的

    n += 1

注意:
1、有些文献的题目中含有“/ \ < > * ? : ”,这样的字符是不允许出现的,所以在表格中把这些符号预先替换掉,从而大大提高成功率。
2、excel文件中的文献排列顺序要和文献文件顺序排列一致,否则出现“张冠李戴”。

### 使用Python批量下载学术文献的方法 为了实现批量下载学术文献的目标,可以采用多种方法和技术组合。一种有效的方式是利用`requests`库、`Selenium`工具以及`BeautifulSoup`库共同完成这一任务[^1]。 #### 选择合适的工具和库 - **Requests**: 这是一个用于发送HTTP请求的强大库,非常适合处理静态页面的内容获取。 - **Selenium**: 当面对包含大量JavaScript渲染内容或交互式组件的网站时,如中国知网(CNKI),Selenium能模拟真实用户的操作行为,从而绕过某些反爬机制并访问所需数据[^2]。 - **BeautifulSoup**: 主要用来解析HTML文档结构,方便提取特定的信息片段,比如文章链接、标题等元数据。 #### 解决动态加载内容的问题 对于像CNKI这样存在复杂前端逻辑(例如使用iframe嵌套)且大部分内容由JavaScript异步加载的情况,仅依靠传统的基于正则表达式的字符串匹配方式难以奏效。此时应考虑借助自动化测试框架——Selenium来驱动浏览器实例执行脚本,进而捕获完整的DOM树以便后续分析[^4]。 ```python from selenium import webdriver import time def init_driver(): options = webdriver.ChromeOptions() prefs = {"profile.managed_default_content_settings.images": 2} # 不加载图片, 加快速度 options.add_experimental_option("prefs", prefs) driver = webdriver.Chrome(chrome_options=options) return driver driver = init_driver() try: url = 'http://www.cnki.net' driver.get(url) # 假设有一个输入框id为'kw', 和一个按钮class为'search-btn' search_box = driver.find_element_by_id('kw') submit_button = driver.find_elements_by_class_name('search-btn')[0] keyword = "机器学习" search_box.send_keys(keyword) submit_button.click() time.sleep(3) # 等待页面加载完毕 finally: pass ``` 这段代码展示了如何初始化Chrome WebDriver,并向指定URL发起GET请求后填写关键词进行搜索的操作过程。需要注意的是,在实际部署前还需根据目标站点的具体情况进行适当调整优化。 #### 提取文献详情页链接 一旦获得了搜索结果列表所在的页面源码,则可以通过BSoup进一步定位每篇论文对应的详情页地址: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(driver.page_source,'html.parser') paper_links = [] for item in soup.select('.result-list .item'): link = item.a['href'] paper_links.append(link) ``` 上述代码段说明了怎样运用CSS选择器选取所有符合条件的结果项,并从中抽取超链接属性值形成最终的文献集合。 #### 下载PDF文件或其他格式资源 最后一步便是针对每一个单独的文章页面发出新的HTTP GET请求以取得其全文pdf或者其他形式的电子版资料。考虑到版权保护等因素的影响,此环节可能涉及到身份验证等问题,因此建议遵循各数据库平台的相关规定合法合规地开展工作。 ```python import os import requests download_dir = './downloads/' if not os.path.exists(download_dir): os.makedirs(download_dir) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } for idx,url in enumerate(paper_links[:5]): # 只尝试下载前五篇文章作为示范 resp = requests.get(url=url, headers=headers) with open(f'{download_dir}{idx}.pdf','wb') as f: f.write(resp.content) print("Download completed.") ``` 以上即为整个流程的大致描述,当然这只是一个简化版本的实际案例,具体实施过程中还需要解决诸如异常处理、并发控制等诸多细节问题。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值