python爬虫实现自动获取论文GB 7714引用

news2024/12/23 11:07:17

在写中文论文、本硕博毕业设计的时候要求非常严格的引用格式——GB 7714引用。对于普通学生来说都是在google scholar上获取,一个一个输入点击很麻烦,就想使用python完成这个自动化流程,实现批量的倒入论文标题,导出引用。

正常引用方法

一般获取GB 7714引用的方法分三步:

step1:打开Google Scholar在输入框中写入论文标题

step2:点击目标论文下方引用

step3:复制引用

这就是获取GB7714引用的方法,但是一个一个点击太慢,所以打算用python爬虫实现这个任务的自动化。

自动流程实现

环境准备

整个流程只需要两个库,直接使用pip安装就可以了:

pip install selenium beautifulsoup4

使用selenium库来模拟浏览器行为,beautifulsoup4库来解析HTML内容。

浏览器驱动准备

除了上面两个库,还需要安装你的浏览器对应的webdriver,这里以chromedriver (for Chrome)举例。 下载后,请确保将chromedriver放在你的系统PATH环境变量中,或者在代码中指定chromedriver的路径。安装chromedriver步骤:

step1:在浏览器地址栏输入chrome://version/

可以直接看到版本号,比如我的就是126.0.6478.126版本

step2:查找对应版本的驱动

官方网址:https://developer.chrome.com/docs/chromedriver/downloads?hl=zh-cn#current_releases

但是页面中没有对应的版本

 往下翻有一个警告,点击 JSON 端点就会进入一个json格式的网页,点击ctrl+f输入chrome浏览器版本进行查找

就会查找到不同系统对应的chromedriver下载地址,复制地址到浏览器中就可以进行下载。接下来就是将chromedriver添加到环境变量中,win系统是UI界面添加非常方便,linux系统则需要通过几个命令实现添加:

sudo nano /etc/environment

打开环境变量文件,就会出现诸如 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"这样的,接着就是在这个后面添加上下载的chromedriver地址就可以。

添加过后需要激活一下:

source /etc/environment

Python爬虫

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import time

def collect_scholar_info(article_titles):
    """
    从Google Scholar收集文章信息。

    Args:
        article_title: 文章标题

    Returns:
        一个字典,包含文章信息,或者None如果找不到文章或发生错误。
    """

    article_results = []
    for article_title in article_titles:

        options = webdriver.ChromeOptions()
        # options.add_argument('--headless') # 可选:无头模式,不打开浏览器窗口
        driver = webdriver.Chrome(options=options) # 替换为你的chromedriver路径,如果不在PATH中
        driver.get("https://xueshu.aigrogu.com/")

        search_box = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.NAME, "q"))
        )
        search_box.send_keys(article_title)
        search_box.submit()

        # 等待搜索结果加载 (时间可能需要调整)
        time.sleep(3)
        page_source = driver.page_source

        # 使用 BeautifulSoup 解析页面
        soup = BeautifulSoup(page_source, 'html.parser')

        # 在这里编写代码来提取你需要的信息
        results = soup.find_all('div', class_='gs_ri')
        first_result = None
        for result in results:
            title = result.find('h3', class_='gs_rt').text
            link = result.find('a')['href']
            first_result = {'title': title, 'link': link}
            
            cite_button = WebDriverWait(driver, 2).until(
                EC.element_to_be_clickable((By.CSS_SELECTOR, "a.gs_or_cit.gs_or_btn.gs_nph"))
            )
            cite_button.click()

            # 等待引用窗口出现并提取信息 (需要根据实际情况调整)
            time.sleep(2) # 等待引用窗口加载
            new_page_source = driver.page_source
            new_soup = BeautifulSoup(new_page_source, 'html.parser')
            time.sleep(2) # 等待引用窗口加载
            gb_citation = new_soup.select_one('#gs_citt > table > tbody > tr:nth-child(1) > td:nth-child(2) > div').text
            first_result['citation_GBT'] = gb_citation.strip() if gb_citation else "未能找到GB/T 7714引用"
            break

        article_results.append(first_result)

    # 关闭浏览器
    driver.quit()

    return article_results

上面实现的是一个抓取函数,输入是多个paper的title,输出是爬取结果的一个list。引文GoogleScholar在多次访问后会出现人机验证,所以就是用一个镜像网站代替:

谷谷学术搜索_谷歌学术搜索_Google 学术搜索

最后输出的结果类似如下:

[{'title': 'Planning-oriented autonomous driving', 'link': 'http://openaccess.thecvf.com/content/CVPR2023/html/Hu_Planning-Oriented_Autonomous_Driving_CVPR_2023_paper.html', 'citation_GBT': 'Hu Y, Yang J, Chen L, et al. Planning-oriented autonomous driving[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2023: 17853-17862.'}, {'title': 'DeepPhos: prediction of protein phosphorylation sites with deep learning', 'link': 'https://academic.oup.com/bioinformatics/article-abstract/35/16/2766/5270665', 'citation_GBT': 'Luo F, Wang M, Liu Y, et al. DeepPhos: prediction of protein phosphorylation sites with deep learning[J]. Bioinformatics, 2019, 35(16): 2766-2773.'}, {'title': '\n[HTML][HTML] A protocol of using PTMiner for quality control and localization of protein modifications identified by open or closed search of tandem mass spectra\n', 'link': 'https://www.ncbi.nlm.nih.gov/pmc/articles/PMC10166509/', 'citation_GBT': 'Cheng Z, Song G, Fu Y. A protocol of using PTMiner for quality control and localization of protein modifications identified by open or closed search of tandem mass spectra[J]. Biophysics Reports, 2022, 8(5-6): 269.'}, {'title': 'A Survey of Multimodal Large Language Model from A Data-centric Perspective', 'link': 'https://arxiv.org/abs/2405.16640', 'citation_GBT': 'Bai T, Liang H, Wan B, et al. A Survey of Multimodal Large Language Model from A Data-centric Perspective[J]. arXiv preprint arXiv:2405.16640, 2024.'}]

以下我这里设置输出的还有文章的链接还有标题,如果不需要可以后续处理中删掉只保留想要的东西,甚至可以格式化输出,方便复制粘贴到论文中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2231625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pycharm中python控制台出现CommandNotFoundError: No command ‘conda run‘.

1、错误现象 pycharm中打开python控制台出现CommandNotFoundError: No command conda run.的错误。 2、背景 conda是4.6版本,在Anaconda Prompt可以正常运行虚拟环境。 3、解决方法 更新conda版本,基本命令,会自动更新到最新版本。 con…

masm汇编字符输入小写转大写演示

从键盘读取一个字符变成大写换行并输出 assume cs:codecode segmentstart:mov ah,1int 21hmov bl,alsub bl,20hmov dl,10mov ah,2int 21hmov dl,blmov ah,2int 21hmov ah,4chint 21hcode ends end start 效果演示:

VisualStudio远程编译调试linux_c++程序(二)

前章讲述了gdb相关,这章主要讲述用VisualStudio调试编译linux_c程序 1:环境 win10 VisualStudio 2022 Community ubuntu22.04 2:安装 1>vs安装时,勾选 使用c进行linux 和嵌入式开发 (这里以vs2022为例) OR VS安装好了, 选择工…

【002】基于SpringBoot+thymeleaf实现的蓝天幼儿园管理系统

基于SpringBootthymeleaf实现的蓝天幼儿园管理系统 文章目录 系统说明技术选型成果展示账号地址及其他说明源码获取 系统说明 基于SpringBootthymeleaf实现的蓝天幼儿园管理系统是为幼儿园提供的一套管理平台,可以提高幼儿园信息管理的准确性,系统将信息…

【AIGC】从CoT到BoT:AGI推理能力提升24%的技术变革如何驱动ChatGPT未来发展

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯迈向AGI的新跨越💯BoT与CoT的技术对比技术原理差异推理性能提升应用范围和通用性从错误中学习的能力总结 💯BoT的工作流程和机制初始化过程生成推…

无人机拦截捕获/直接摧毁算法详解!

一、无人机拦截捕获算法 网捕技术 原理:抛撒特殊设计的网具,捕获并固定无人机。 特点: 适用于小型无人机。 对无人机的损害较小,基本不影响其后续使用。 捕获成功率较高,且成本相对较低。 应用实例:…

解码层跑几次取决于输出词汇多少;10个单词,在解码层跑几次transformer

目录 解码层跑几次取决于输出词汇多少 10个单词,在解码层跑几次transformer 解码层跑几次取决于输出词汇多少 10个单词,在解码层跑几次transformer 取决于具体任务和输出要求 在自然语言处理任务中,Transformer 架构的解码器(Decoder)运行次数与你想要生成的输出长度有关…

算法【Java】—— 记忆化搜索

记忆化搜索 在前面我们已经学习了递归回溯等知识,什么是记忆化搜索,其实就是带着备忘录的递归,我们知道在递归过程中如果如果出现大量的重复的相同的子问题的时候,我们可能进行了多次递归,但是这些递归其实可以只用进…

优化EDM邮件营销,送达率与用户体验双赢

EDM邮件营销需选对平台,优化邮件列表,确保内容优质,进行邮件测试,关注用户反馈调整频率,以保高送达率,提升营销效果。 1. 了解电子邮件送达率的重要性 在开始优化邮件送达率之前,首先需要理解电…

Metasploit渗透测试之在云服务器中使用MSF

概述 随着云计算的发展,对基于云的应用程序、服务和基础设施的测试也在不断增加。在对云部署进行渗透测试时,最大的问题之一是共享所有权。过去,在进行渗透测试时,企业会拥有网络上的所有组件,我们可以对它们进行全部…

Qt桌面应用开发 第一天

目录 1.默认代码解析 1.1main.h解析 1.2myWidget.h解析 1.3FirstProject.pro解析(FirstProject为创建的Qt项目名) 2.命名规范与快捷键 3.按钮控件及窗口设置 3.1按钮控件QPushButton类 3.2窗口常用设计 4.Qt中的对象树 5.Qt中的坐标系 Qt是一个…

简记Vue3(三)—— ref、props、生命周期、hooks

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

Mybatis查询数据库,返回List集合,集合元素也是List。

#有时间需求会要求&#xff1a;查询全校的学生数据&#xff0c;且学生数据按班级划分。那么就需要List<List<user>>类型的数据。 SQL语句 SELECT JSON_ARRAYAGG(JSON_OBJECT(name , name ,BJMC, BJMC ,BJBH,BJBH)) as dev_user FROM dev_user WHERE project_id …

Freertos学习日志(1)-基础知识

目录 1.什么是Freertos&#xff1f; 2.为什么要学习RTOS&#xff1f; 3.Freertos多任务处理的原理 1.什么是Freertos&#xff1f; RTOS&#xff0c;即&#xff08;Real Time Operating System 实时操作系统&#xff09;&#xff0c;是一种体积小巧、确定性强的计算机操作系统…

批量提取当前文件夹内的文件名

在需要提取的文件夹内新建一个txt文件&#xff0c;输入&#xff1a; dir ./b>name.txt 然后将该txt文件的扩展名改为.bat 如图 双击即可提取当前文件夹文件名&#xff0c;并保存到name.txt内

小林渗透入门:burpsuite+proxifier抓取小程序流量

目录 前提&#xff1a; 代理&#xff1a; proxifier&#xff1a; 步骤&#xff1a; bp证书安装 bp设置代理端口&#xff1a; proxifier设置规则&#xff1a; proxifier应用规则&#xff1a; 结果&#xff1a; 前提&#xff1a; 在介绍这两个工具具体实现方法之前&#xff0…

Node.js:session JWT

Node.js&#xff1a;session & JWT sessioncookiesessionexpress-session JWTexpress-jwt & jsonwebtoken session HTTP协议是无状态的&#xff0c;客户端的每次HTTP请求都是独立的&#xff0c;多个请求之间没有直接的关系&#xff0c;服务器不会保留每次HTTP请求的状…

后台管理系统的通用权限解决方案(七)SpringBoot整合SpringEvent实现操作日志记录(基于注解和切面实现)

1 Spring Event框架 除了记录程序运行日志&#xff0c;在实际项目中一般还会记录操作日志&#xff0c;包括操作类型、操作时间、操作员、管理员IP、操作原因等等&#xff08;一般叫审计&#xff09;。 操作日志一般保存在数据库&#xff0c;方便管理员查询。通常的做法在每个…

曹操出行借助 ApsaraMQ for Kafka Serverless 提升效率,成本节省超 20%

本文整理于 2024 年云栖大会主题演讲《云消息队列 ApsaraMQ Serverless 演进》&#xff0c;杭州优行科技有限公司消息中间件负责人王智洋分享 ApsaraMQ for Kafka Serverless 助力曹操出行实现成本优化和效率提升的实践经验。 曹操出行&#xff1a;科技驱动共享出行未来 曹操…

Mysql常用语法一篇文章速成

文章目录 前言前置环境数据库的增删改查查询数据查询所有条件查询多条件查询模糊查询分页查询排序查询分组查询⭐️⭐️关联查询关联分页查询 添加数据insert插入多条记录不指定列名(适用于所有列都有值的情况) 更新数据更新多条记录更新多个列更新不满足条件的记录 删除统计数…