• Python自动化小技巧12——根据论文题目自动导出参考文献格式


    案例背景

    在写论文的时候,弄参考文献格式也很麻烦,不可能手打人名题目期刊名称年月日卷号页码这些,我们一般都是使用系统自动导出的格式复制粘贴就行。中国知网可以直接导出论文的格式,但是知网基本只有中文的论文,英文的论文还有很多sci的库里面的论文都没有。

    我们一般看英文论文都是国外的期刊库,网站都是各种来源的,想一一导出论文的参考文献格式需要一个一个去找......有的还不一定找得到,而且像science Direct网站导出来还是一个txt文件,都不能直接用.......

    有没有办法,只需要论文的题目,就能输出参考文献格式呢?

    有的,谷歌学术就可以做到,中文英文的论文都能导出参考文献格式,复制论文题目进去,然后点出引用就能复制粘贴了。

    但是这个过程是很枯燥的,复制标题,搜索,点击引用,复制粘贴...反复循环。

    但是这种重复性的劳动交给Python脚本是很棒,很便捷的。下面来实现它。


    代码思路

    先获取论文题目,放到一个列表里面。然后使用selenium库去进行模拟点击,得到引用文本,最后写入word就行。


    代码实现

    获取论文题目1

    第一个方法,这里可以使用bat脚本,不需要python环境就能运行的。

    首先和你所有的参考文献一个文件夹目录下,新建一个txt文件,写入下面代码:

    dir *.* /b> 文本档案.txt

    然后保存退出,右键这个文本文件,重命名,修改文件后缀。从 'txt' 改为 ‘bat’ 。这样它就变成了脚本文件。我把它名称命名为‘’目录‘

    然后双击运行一下,就会多出一个文本档案的txt文件。里面就有这个文件夹下所有的文件名称。

              

     当然,这是对你文件名称是论文的名称才能使用。如果你论文的名称是乱码那就不行了....可以将每个文件重命名为论文名称然后再使用这个脚本。

     


    获取论文题目2

    第二个方法,针对这个库上面的导出来的txt文本去获取论文名称,我目前看英文论文就是这样用的。

    导出的一个论文参考文献会给这样一个txt文件:

     我们可以看到第一行是作者们名字,第二行就是论文名称了。

    我们遍历所有的下载的这个txt文件(在science Direct下载论文的时候记得顺便把这个引用导出txt文件也下载了,不然后面再找很麻烦),然后取出第二行论文名称,装在一个列表里面就行。

    1. import numpy as np
    2. import pandas as pd
    3. import glob
    4. files=glob.glob('*.txt')
    5. paper_names=[]
    6. for file in files:
    7. with open(file, 'r',encoding='utf-8') as f:
    8. context = f.readlines()
    9. context=[ con.replace('\n','') for con in context]
    10. paper_names.append(context[1])
    11. print(context[1])

    可以看到我参考文献目录下面的所有论文名称都提取出来了。装在paper_names这个列表中


    模拟点击获取参考文献格式 

    导入selenium库

    1. from selenium import webdriver
    2. from selenium.webdriver.common.keys import Keys
    3. from selenium.webdriver.common.by import By
    4. from bs4 import BeautifulSoup
    5. import os
    6. from time import sleep

    模拟浏览器点击,这里使用的是Xpath路径去定位网页文件元素。

    然后使用的是edge的浏览器驱动,使用这段代码前还需要下载一个edge 的驱动,与代码文件放在同一目录下,下载链接在这:

    Microsoft Edge WebDriver - Microsoft Edge Developer

    根据电脑版本下,一般Windows下这个64就行:

     

    模拟点击运行 代码如下:(每一步的原理就不讲了....没爬虫基础可能也看不懂)

    1. ckwx=[]
    2. from selenium.webdriver import Edge
    3. from selenium.webdriver.edge.options import Options as EdgeOptions
    4. driver = webdriver.Edge("msedgedriver")
    5. url = "https://xs.scqylaw.com/"
    6. driver.implicitly_wait(10)
    7. driver.get(url)
    8. sleep(3)
    9. code=driver.find_element(By.XPATH,'//*[@id="lst-ib"]')
    10. code.send_keys('LSTM')
    11. driver.find_element(By.XPATH,'/html/body/div[1]/center/div[3]/form/div[2]/input[1]').click()
    12. #网页转换,将网页转换到所需的地方
    13. win =driver.window_handles
    14. driver.switch_to.window(win[1])
    15. sleep(2)
    16. driver.find_element(By.XPATH,'//*[@id="mainshadow"]/div/div/input').send_keys('gfsoso')
    17. sleep(1)
    18. driver.find_element(By.XPATH,'//*[@id="mainshadow"]/div/div/a').click()
    19. for i in range(len(paper_names)):
    20. code=driver.find_element(By.XPATH,'//*[@id="gs_hdr_tsi"]')
    21. code.clear()
    22. code.send_keys(paper_names[i])
    23. driver.find_element(By.XPATH,'//*[@id="gs_hdr_tsb"]').click()
    24. sleep(1)
    25. driver.find_element(By.XPATH,'//*[@id="gs_res_ccl_mid"]/div[1]/div[2]/div[3]/a[2]').click()
    26. sleep(1)
    27. yy=driver.find_element(By.XPATH,'//*[@id="gs_citt"]/table/tbody/tr[1]/td/div')
    28. ckwx.append(yy.text)
    29. driver.find_element(By.XPATH,'//*[@id="gs_cit-x"]').click()
    30. sleep(1)
    31. driver.quit()

    现在参考文献的格式都提取出来了,装在了ckwx这个列表中,打印查看:


     

    写入word文档

    用docx这个包就行:(下载命令——pip install python-docx)

    1. import docx
    2. from docx import shared
    3. from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
    4. doc=docx.Document() #创建内存中的word文档对象
    5. doc.styles['Normal'].font.name = 'Times New Roman'
    6. doc.styles['Normal'].font.size = shared.Pt(9)
    7. for i in range(len(ckwx)):
    8. doc.add_paragraph(f"[{i+1}] {ckwx[i]}")
    9. doc.save("参考文献汇总.docx") #保存才能看到结果

    最后生成一个word,查看一下效果还不错:

     

  • 相关阅读:
    应用在LED装饰灯中的LED炫彩灯珠
    P2895 [USACO08FEB]Meteor Shower S
    python入门篇08- 函数进阶-参数传递
    今年最大的开源盛会 KubeCon 为开发者带来了什么?
    无线安全操作(1)
    MySQL高级语句
    Flutter安装或者更新包没反应
    nginx设置开启自启动
    关于数据权限的设计
    接口测试vs功能测试
  • 原文地址:https://blog.csdn.net/weixin_46277779/article/details/128063426