2023最新 - 谷歌学术文献Bibtex批量获取脚本

news/2023/6/9 18:23:32

首先,自行解决网络访问问题,保证能访问到谷歌学术,否则下面可免看

第一步:安装 selenium

python 安装 selenium

pip install selenium

第二步:安装 Chrome 浏览器

http://chorm.com.cn/

第三步:根据 Chrome 版本,下载 Chrome Driver

在设置 - 帮助 - 关于 GoogleChrome 查看版本

然后在这里找对应版本的driver(版本一定要对应)

https://registry.npmmirror.com/binary.html?path=chromedriver/

第四步:整理需要引用的文献

将需要获取的文献题目添加到一个新建的txt文本中:(一行一篇),我新建的文件名字是:pn.txt
在这里插入图片描述

第五步:执行如下脚本

注意在if __name__ == "__main__":下修改成你自己的路径 driver_pathinput_file_pathoutput_file_path

driver_path:改成你下载的chrome driver的位置(最好别有中文)
input_file_path:输入文件路径,默认是pn.txt
output_file_path:输出文件路径,默认是output.txt

脚本代码自取:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from urllib import parse
import math
from time import sleepclass GG_Bibtex(object):def __init__(self, driver_path, gg_search_url):self.driver = Noneself.paper_names = []self.gg_search_url = gg_search_urlself.driver_path = driver_pathself.reset(driver_path)def reset(self, driver_path):self.service = Service(driver_path) option = webdriver.ChromeOptions()# option.add_argument('headless')  # no show windowself.driver = webdriver.Chrome(service=self.service, options=option)self.driver.set_window_size(800,800)def get_bib_text(self, paper_title):elements_xpath = {'qoute_btn':'/html/body/div/div[10]/div[2]/div[3]/div[2]/div/div/div[3]/a[2]/span','bibtex_btn':'/html/body/div/div[4]/div/div[2]/div/div[2]/a[1]','bib_text':'/html/body/pre'}strto_pn=parse.quote(paper_title)url = self.gg_search_url + strto_pnself.driver.get(url)qoute_btn = WebDriverWait(self.driver, 15, 0.1).until(EC.presence_of_element_located((By.XPATH, elements_xpath['qoute_btn'])))qoute_btn.click()bibtex_btn = WebDriverWait(self.driver, 15, 0.1).until(EC.presence_of_element_located((By.XPATH, elements_xpath['bibtex_btn'])))bibtex_btn.click()bib_text = WebDriverWait(self.driver, 15, 0.1).until(EC.presence_of_element_located((By.XPATH, elements_xpath['bib_text'])))bib_text = bib_text.textreturn bib_textdef _quit_driver(self, ):self.driver.quit()self.service.stop()def results_writter(self, results, output_file_path = 'output.txt'):wtf = []for re_key in results.keys():context = results[re_key]# wtf.append(re_key + '\n')wtf.append(context + '\n\n')with open(output_file_path, 'w') as f:f.writelines(wtf)def run(self, paper_names, output_file_path, reset_len = 10):"""@params:paper_names: [LIST], your paper names.reset_len: [INT], for avoid the robot checking, you need to reset the driver for more times, default is 10 papers"""self.paper_names = paper_namespaper_len = len(paper_names)rest = paper_len % reset_lentask_packs = []if paper_len > reset_len:groups_len = int(math.floor(paper_len / reset_len)) # 21/20 = 1for i in range(groups_len):sub_names = paper_names[(i)*reset_len:(i+1)*reset_len]task_packs.append(sub_names)task_packs.append(paper_names[-1*rest:])results = {}for ti in task_packs:for pn in ti:if len(pn) < 3:continueprint('\n---> Searching paper: {} ---> \n'.format(pn))bibtex = self.get_bib_text(pn)print(bibtex)results[pn] = bibtexself._quit_driver()sleep(1)self.reset(self.driver_path)print('-'*10+'\n Reset for avoiding robot check')self.results_writter(results, output_file_path)return resultsif __name__ == "__main__":driver_path = r"C:/Users/jt/Downloads/chromedriver_win32/chromedriver.exe"input_file_path = 'pn.txt'output_file_path = 'output.txt'gg_search_url = r'https://scholar.google.com.hk/scholar?hl=zh-CN&as_sdt=0%2C5&q='ggb = GG_Bibtex(driver_path = driver_path, gg_search_url = gg_search_url)paper_names = []with open(input_file_path, 'r') as f:paper_names = f.readlines()paper_names = [pn.replace('\n', '') for pn in paper_names]results = ggb.run(paper_names = paper_names, output_file_path = output_file_path)

输出结果文件:

在这里插入图片描述
修改一下后缀名,就能直接作为bib文件使用了。

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

流水号获取的解决方案

流水号的获取在单机版的程序中只需要简单的递增就可以解决。但是在分布式系统中存在多个客户端同时请求同一个流水号的问题&#xff0c;如果处理不好容易导致多个客户端获得同一个流水号。 解决方案一 在Oracle数据库中有专门的序列管理sequence&#xff0c;具体的介绍在网上可…

数据库及ADO.NET学习(三)

目录日期函数练习ADO.NET组成其它类连接数据库Connection执行操作CommandExecuteReader查询&#xff08;多行多列&#xff09;异常处理ExecuteScalar查询ExecuteScalar查询记录数执行插入语句返回自动编号登录案例ADO.NET连接池日期函数 --帮助文档里对于每个函数都有详细的说…

MySQL安装包括哪些主要部件_MySQL安装包括哪些主要部件()A.MySQL服务器B.MySQL客户端程序C.PL/SQLD.MySQL非客户端工具E.My...

MySQL安装包括哪些主要部件()A.MySQL服务器B.MySQL客户端程序C.PL/SQLD.MySQL非客户端工具E.My 更多相关问题 顾客购买总价值包括 投资与利率之间的关系表示的投资函数I=i(r)满足的条件是di/dr>0。 北宋神宗年间,命令州县文庙都要在孔子像旁画上了唐朝大文豪( )的像。 Per…

c 语言与数据库技术基础教程答案,2016计算机三级《数据库技术》备考习题与答案...

2016计算机三级《数据库技术》备考习题与答案1.若当前工作区为A&#xff0c;执行以下命令后结果为(d)REPLACENUMWITH20STORE0TONUM?NUM&#xff0c;A->NUM&#xff0c;M.NUMA.0020B.0200C.000D.202002.将格式化输出命令的输出送打印机的正确命令是cA.SETPRlNTONB.SETPRINTO…

使用 SQLD 在线设计 Microsoft SQL Server 数据库实例

为什么80%的码农都做不了架构师&#xff1f;>>> 打开浏览器进入 SQLD 网站 http://sqld.sinaapp.com/ 首先通过微博登录&#xff0c;然后点击工具条“选项设置”&#xff0c;在弹出的对话框中选择 * 新建的数据库设为&#xff1a;mssql 使用“添加表”、“添加列”…

MySQL启动提示The server quit without updating PID file (/[失败]sqld/mysqld.pid).

mysql突然挂掉&#xff0c;重新启动提示The server quit without updating PID file 从网上找了各种方法尝试都不管用&#xff0c;开始以下漫长的尝试之路~ 首先 从 mysqld_safe 查看日志路径 打开日志看到报错信息&#xff1a; 2021-12-28T12:58:09.193497Z 0 [Note] Serve…

mysql安装 sqld,安装mysql

二、操作脚本1.光盘挂载cd /mntlsmount /dev/cdrom /mnt2.建立yum仓库cd /etc/yum.repos.d/vim aaa.repo> [aaa]> nametest> baseurlfile:///mnt> enabled1> gpgcheck0lsrm -rf rhel-source.repoyum list3.共享挂载mkdir /opt/lampsmbclient -L //192.168.119.2…

mysql安装 sqld_MySQL安装

网上的教程有很多&#xff0c;基本上大同小异。但是安装软件有时就可能因为一个细节安装失败。我也是综合了很多个教程才安装好的&#xff0c;所以本教程可能也不是普遍适合的。安装环境&#xff1a;win71、下载zip安装包&#xff1a;MySQL8.0 For Windows zip包下载地址&#…