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

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

正常引用方法

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

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

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

step3:复制引用

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

自动流程实现

环境准备

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

bash 复制代码
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系统则需要通过几个命令实现添加:

bash 复制代码
sudo nano /etc/environment

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

添加过后需要激活一下:

bash 复制代码
source /etc/environment

Python爬虫

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.'}

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

相关推荐
零基础123几秒前
Agent 的 Memory 怎么做科研:以中医诊断场景为例
人工智能·经验分享·python·语言模型
databook42 分钟前
面向数据工程师的正则表达式:从日志清洗到字段提取
python·正则表达式·数据分析
zhangzeyuaaa1 小时前
深入理解 Ruby 运算符:本质、分类、坑点与重载实战
开发语言·前端·ruby
一木 之林1 小时前
DeepSeek Agent 开发(一)
开发语言·前端·javascript
朔北之忘 Clancy1 小时前
青少年软编等考七级题解目录
开发语言·c++·青少年编程·gesp·csp·信奥赛·noi
ss2731 小时前
AI全栈实战 | 3.2-01 Python 基础:四大数据容器怎么选,推导式为什么是 Pythonic 的灵魂
开发语言·人工智能·python
Mr_Macallon1 小时前
C++回顾(基础)(01)
c语言·开发语言·c++·学习
计算机毕业编程指导师1 小时前
【大数据毕设选题推荐】基于Spark的WTA职业网球赛事演变与竞技格局分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·python·计算机·spark·毕业设计·课程设计·wta网球
未来之窗软件服务2 小时前
Go 利器 GoReSym:剥离符号恢复 Go 二进制元数据—东方仙盟
开发语言·golang·仙盟创梦ide·东方仙盟
言乐62 小时前
Python区分广度优先深度优先宽度优先的区别
python·算法·深度优先·广度优先·宽度优先