如何自动化获取谷歌学术上学者的全部论文信息

news2024/9/24 13:16:34

如何自动化获取谷歌学术上学者的全部论文信息

在学术研究领域,追踪和分析学者的研究工作是非常重要的。本文介绍了如何使用Python自动化地收集指定学者的谷歌学术主页上的所有论文信息。

示例:施一公院士的谷歌学术主页

以施一公院士的谷歌学术主页为例,我们首先复制其页面链接:

https://scholar.google.com.hk/citations?user=aedLOyoAAAAJ&hl=zh-CN&oi=ao

施一公院士的谷歌学术主页截图

将链接输入到下面提供的Python脚本中,脚本将自动收集页面上列出的所有论文信息。

输出结果

运行脚本后,输出为Excel,如下图所示:

输出结果示例

此外,还提供了一个可执行文件(.exe),方便在不同的环境下运行,无需安装Python环境。相关文件可以在以下百度云链接中找到:
https://pan.baidu.com/s/1I9OA4h3tN0ogdchOQdDSUw?pwd=m31e
提取码:m31e

使用的代码

……

import re
import requests
import pandas as pd
from datetime import datetime
from bs4 import BeautifulSoup

# 请求用户输入Google Scholar主页的网址
url_base = input("请输入Google Scholar主页的网址: ")

# 定义HTTP请求头,模拟正常浏览器访问,以避免被网站阻止
HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

def get_soup(url):
    """
    发送HTTP请求到指定URL并获取BeautifulSoup对象。

    参数:
    - url: 要请求的网页的URL字符串。

    返回:
    - BeautifulSoup对象,用于进一步解析网页内容。

    异常:
    - HTTPError: 如果响应的状态码不是200,即请求失败。
    """
    # 定义请求头,模拟浏览器行为
    response = requests.get(url, headers=HEADERS)
    # 检查请求是否成功,如果状态码不是200,则抛出异常
    response.raise_for_status()
    # 使用BeautifulSoup解析响应内容,并返回BeautifulSoup对象
    return BeautifulSoup(response.text, 'html.parser')

# 主逻辑
def main():
    """
    主函数,从Google Scholar网站抓取指定数量的论文信息,并保存到Excel文件中。
    """
    # 定义列名
    columns = ['年份', '期刊', '题目', '作者', '一作','中文/英文']

    # 初始化DataFrame,用于存储论文信息
    papers_df = pd.DataFrame(columns=columns)


    # Loop settings
    cstart = 0      # Starting index of papers
    pagesize = 100  # Number of papers per page

    # 初始化一个空列表来存储每行的数据
    data_rows = []

    # 每次爬取100篇,直到爬取所有文章
    while True:

        url = f'{url_base}&cstart={cstart}&pagesize={pagesize}'

        # 使用get_soup函数获取Google Scholar网页的BeautifulSoup对象
        soup = get_soup(url)

        # 找到所有表示论文的行
        rows = soup.find_all('tr', class_='gsc_a_tr')
        
        try:
            for row in rows:
                # 提取论文标题
                title = row.find('a', class_='gsc_a_at').text
                # 提取作者信息
                authors = row.find('div', class_='gs_gray').text
                # 提取第一作者
                first_author = authors.split(',')[0] if authors else 'N/A'
                # 提取发表年份
                year = row.find('span', class_='gsc_a_h gsc_a_hc gs_ibl').text
                # 提取期刊信息,并去除可能的页码等信息
                journal_info = row.find_all('div', class_='gs_gray')[1].text.split(',')[0] if len(row.find_all('div', class_='gs_gray')) > 1 else 'N/A'
                journal_name = re.sub(r'\s\d+.*$', '', journal_info)

                # 判断中文还是英文
                if ',' in authors:
                    Chinese_English = '英'
                elif ',' in authors:
                    Chinese_English = '中'
                else:
                    Chinese_English = ''

                # 输出提示
                print(f"题目:{title}\n作者:{authors}\n一作:{first_author}\n年份:{year}\n期刊:{journal_name}\n中英文:{Chinese_English}\n")
                        
                # 构造论文信息字典
                data = {
                    '年份': year,
                    '期刊': journal_name,
                    '题目': title,
                    '作者': authors,
                    '一作': first_author,
                    '中文/英文': Chinese_English
                }
                # 将论文信息添加到列表中
                data_rows.append(data)


            cstart += 100

        except:
            # 所有文献检索完成
            break
        
    # 将列表转换为DataFrame
    papers_df = pd.DataFrame(data_rows, columns=columns)

    # 获取当前的日期和时间
    current_time = datetime.now()
    # 格式化日期和时间为字符串,用于文件名
    formatted_time = current_time.strftime("%Y-%m-%d_%H-%M-%S")
    # 创建文件名,包含当前的日期和时间
    filename = f'papers_info_{formatted_time}.xlsx'
    # 将DataFrame保存到Excel文件中
    papers_df.to_excel(filename, index=False)

    # 输出提示
    print('文件已经生成')

if __name__ == "__main__":
    main()

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

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

相关文章

redis7.2.2|Dict

文章目录 StructredisDBdictdictTypedictEntry 宏定义散列函数散列冲突dictEntry pointer bit tricks[指针位技巧]API implementation_dictReset_dictInitdictCreatedictGetHashdictSetKeydictSetValdictSetNextdictGetNextdictGetValdictGetKey_dictCleardictEmptydictRelease…

Linux进程——信号详解(上)

文章目录 信号入门生活角度的信号技术应用角度的信号用kill -l命令可以察看系统定义的信号列表信号处理常见方式概述 产生信号通过键盘进行信号的产生,ctrlc向前台发送2号信号通过系统调用异常软件条件 信号入门 生活角度的信号 你在网上买了很多件商品&#xff0…

洗地机推荐购买要点全攻略:洗地机哪些品牌好用?热门洗地机详细体验点评

清洁家务可谓是家务清洁中最累人的存在,既浪费时间也浪费精力,还费腰。如果是家有萌宠的铲屎官们就更加辛苦了,不仅清洁时会被萌宠们打扰,还要处理漫天飞舞和沾在地面上的毛发。那么有没有一款智能家电可以帮助我们快速高效的完成…

百度SEO快排原理是什么?如何快速排名方法?

前言:我之前说过我不打算写这个快速排序。 首先,我从来没有在自己的网站上操作过所谓的快速排序。 其次,我不能像网上很多人写的那样透露百度快速排序的秘密(说实话,你可以透露秘密)。 方法是有了&#xff…

MWC 2024丨美格智能CEO杜国彬出席中国联通创新成果发布会并发表主题演讲

2月26日,中国联通在MWC2024 巴塞罗那期间举办了以“算网为基,智领未来”为主题的创新成果发布会,集中展示最新的创新成果与最佳实践。 中国通信标准化协会理事长闻库、GSMA首席财务官Louise Easterbrook、中国联通副总经理梁宝俊、华为ICT销…

xsslabs第五关

看一下源码 <!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv"content-type" content"text/html;charsetutf-8"> <script> window.alert function() { confirm("完成的不错&#xff01…

代码随想录第45天|● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数

文章目录 ● 70. 爬楼梯 &#xff08;进阶&#xff09;思路&#xff1a;- 排列 先value后weight代码&#xff1a; ● 322. 零钱兑换思路&#xff1a;代码 ● 279.完全平方数思路&#xff1a;代码 ● 70. 爬楼梯 &#xff08;进阶&#xff09; 思路&#xff1a;- 排列 先value后…

Godot自定义控件样式语法解析

前言 本篇原始文章写于2023年8月7日&#xff0c;存储在我的语雀文档中。但是语雀分享有诸多不便&#xff0c;为了让更多Godoter更轻松的搜到和看到&#xff0c;就转过来了。 这个项目我上传了Github&#xff0c;后续会贴上链接。 概述 Godot控件体系存在的问题之一就是样式无…

C++ 快速排序快速选择

目录 1、75. 颜色分类 2、912. 排序数组 3、 215. 数组中的第K个最大元素 4、LCR 159. 库存管理 III 1、75. 颜色分类 思路&#xff1a;利用快速排序思路&#xff0c;使用三指针分块进行优化。 [0,left]——小于key[left1,right-1]——等于key[right,nums.size()]——大于k…

解决Mybatis报Type interface *.*Mapper is not known to the MapperRegis

解决Mybatis报Type interface *.*Mapper is not known to the MapperRegis 问题发现问题解决方法一&#xff1a;检查Mapper文件的namespace路径是否正确方法二&#xff1a;使用其他方法是否正确 问题发现 在学习MyBatis框架的时候&#xff0c;不使用 XML 构建 SqlSessionFacto…

2023年NOC大赛软件创意编程(学而思)赛道图形化小高组初赛试题,包含答案

2023NOC初赛试题-小高-A卷(平行讲义) 一、判断 1、如果想要编程演奏乐曲需要添加下面的拓展模块 2、运行下面的程序,我们看不到角色位置在舞台上发生变化 3、运行下面的程序,我们会在舞台上看到一个正方形。 4、运行下面的程序,结果一定为true。 5、运行下面的程序,…

顶易海关数据怎么做获客?功能详解看这里!

顶易海关数据怎么做获客呢&#xff1f;详解看这里&#xff01; 海关数据系统登录&#xff1a;hg.smtso.com/?iEF6DCB 如果对开发国外优质客户感兴趣的话&#xff0c;关注Felicia外贸说&#xff0c;一键开发客户不是问题。 海关数据主要功能&#xff1a; 报关单详情查询&#…

YOLO v9训练自己数据集

原以为RT-DETR可以真的干翻YOLO家族&#xff0c;结果&#xff0c;&#xff01;&#xff01;&#xff01;&#xff01; 究竟能否让卷积神经网络重获新生&#xff1f; 1.数据准备 代码地址&#xff1a;https://github.com/WongKinYiu/yolov9 不能科学上网的评论区留言 数据集…

【JavaEE】_Spring MVC项目之建立连接

目录 1. Spring MVC程序编写流程 2. 建立连接 2.1 RequestMapping注解介绍 2.2 RequestMapping注解使用 2.2.1 仅修饰方法 2.2.2 修饰类与方法 2.3 关于POST请求与GET请求 2.3.1 GET请求 2.3.2 POST请求 2.3.3 限制请求方法 1. Spring MVC程序编写流程 1. 建立连接&…

【重温设计模式】装饰模式及其Java示例

装饰模式的介绍 在众多设计模式中&#xff0c;有一种叫做装饰模式&#xff0c;它以一种独特的方式赋予了代码更多的灵活性。 装饰模式是一种结构型设计模式&#xff0c;它允许我们在运行时动态地为对象添加新的行为。这就像是我们在装饰一个房间时&#xff0c;可以随意添加或更…

学习网络编程No.11【传输层协议之UDP】

引言&#xff1a; 北京时间&#xff1a;2023/11/20/9:17&#xff0c;昨天成功更文&#xff0c;上周实现了更文两篇&#xff0c;所以这周再接再厉。当然做题任在继续&#xff0c;而目前做题给我的感觉以套路和技巧偏多&#xff0c;还是那句话很多东西不经历你就是不懂&#xff…

C#入门:简单数据类型和强制类型转换

本文由 简悦 SimpRead 转码&#xff0c; 原文地址 mp.weixin.qq.com 本期来讲讲 unity 的脚本语言 —C#&#xff0c;C# 的简单数据类型及范围和强制类型转化的方法。这可是 unity 游戏开发必备技能。 1. 简单数据类型 各个类型的范围&#xff1a; byte -> System.Byte (字节…

roslaunch 报错 numpy与python版本冲突

报错&#xff1a; File "/usr/lib/python3/dist-packages/numpy/core/__init__.py", line 17, in <module> from . import multiarray File "/usr/lib/python3/dist-packages/numpy/core/multiarray.py", line 14, in <module> from . import…

蓝桥杯练习系统(算法训练)ALGO-992 士兵杀敌(二)

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 南将军手下有N个士兵&#xff0c;分别编号1到N&#xff0c;这些士兵的杀敌数都是已知的。   小工是南将军手下的军师&…

gif闪图如何在线生成?仅需三步在线制作gif闪图

Gif动态图片是一种通过连续播放的一系列图片来展示的。Gif动图的优势是体积小、传播速度快且不受限制。当我们想要将多张图片变成带有闪动效果的gif动图时应该怎么操作呢&#xff1f;这时候&#xff0c;只需要使用在线闪图制作&#xff08;https://www.gif.cn/&#xff09;网站…