当前位置: 首页 > article >正文

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

在写中文论文、本硕博毕业设计的时候要求非常严格的引用格式——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.kler.cn/a/376338.html

相关文章:

  • 云计算作业二Spark:问题解决备忘
  • pandas——DataFrame
  • Servlet 3.0 注解开发
  • C语言——八股文(笔试面试题)——持续更新
  • RabbitMQ 存储机制
  • SmartX 在新能源:支撑多家头部企业 MES 等核心系统稳定运行与 VMware 替换
  • 【开源免费】基于SpringBoot+Vue.J服装商城系统(JAVA毕业设计)
  • i2c与从设备通讯编程示例之开发板测试
  • 使用pytorch实现LSTM预测交通流
  • 【排序】常见的八大排序算法
  • STM32 从0开始系统学习5
  • 基于javaweb(springboot+mybatis)网站建设服务管理系统设计和实现以及文档报告设计
  • C语言简介
  • 训练和部署Qwen2.5,实战教程步骤,训练qwen2.5教程,vLLM,Open WebUI,LLaMA-Factory
  • Golang文件操作
  • python开发工具是选择vscode还是pycharm?两款软件优缺点对照!
  • 电商领域软件系统实战:基于TiDB的分布式数据库应用
  • 求最大公约数,最小公倍数
  • 集成旺店通旗舰版售后单至MySQL数据库
  • leetcode-88-合并两个有序数组
  • 江协科技STM32学习- P33 实验-软件I2C读写MPU6050
  • 【攻防实战】手把手带你打穿某集团内网(上)
  • RTX5/FreeRTOS全家桶源码工程综合实战模板集成CANopen组件(2024-10-30)
  • IT界的大神-003- 史蒂夫·乔布斯 (Steve Jobs)
  • 字体反爬 fontTools | ddddocr
  • 高德地图如何标注店铺名称和位置信息?