搞科研的小伙伴总是会被期刊严苛的引用文献格式搞的很头疼。虽然常用的文献软件可以一键导出BibTex,但由于很多论文在投稿之前都会先发上Arxiv占坑,软件就很可能会把文献引出为来自Arxiv。我用的是Zotero,就有这个毛病。

  因此,如果是IEEE的期刊,最好是直接去IEEE官网搜索并导出引用,否则可以使用谷歌学术。为了减少重复性的动作,我使用selenium来帮我完成这些操作。Selenium是Python的一个爬虫包,具体可以看:Python Selenium库的使用。

  在此之前,需要安装的有:

  1、谷歌浏览器。也可以用别的浏览器,具体看上面的Selenium教程。

  2、Selenium控制谷歌浏览器的驱动。网址

  3、配置驱动的环境变量,就是把驱动解压的位置放到PATH里。感觉可有可无,因为代码中还是会用到驱动的位置。

  下面是Python代码,具体操作就是先从IEEE官网找,如果找不到再去谷歌学术找。需要具体配置的地方已在代码中注释:

#%% 从IEEE与谷歌学术爬取论文引用
from selenium import webdriver
from urllib import parse
from time import sleep class GetBibs():
def __init__(self, driver_path, option_path, ie_search_url, gg_search_url) -> None:
self.ie_search_url = ie_search_url
self.gg_search_url = gg_search_url
# 启用带插件的浏览器
option = webdriver.ChromeOptions()
option.add_argument("--user-data-dir="+option_path)
self.browser = webdriver.Chrome(executable_path = driver_path, options = option) # 打开chrome浏览器
self.browser.set_window_size(800,800) #不要随意修改,太窄会导致按钮的隐藏,模拟点击失效 def get_bib_from_IEEE(self, paper_title):
strto_pn=parse.quote(paper_title)
url = self.ie_search_url + strto_pn
self.browser.get(url)
compare_title = ''.join(list(filter(str.isalnum, paper_title))).lower()
#等待词条加载
for i in range(100):
try:
elements=self.browser.find_elements_by_css_selector("[class='List-results-items']")
elements[0].get_attribute('id')
break
except:
sleep(0.1)
#扫描所有词条,是否存在所需文献
paper_url = r'https://ieeexplore.ieee.org/document/'
for i in elements:
s_title = i.text.split('\n')[0]
s_title = ''.join(list(filter(str.isalnum, s_title))).lower()
if s_title == compare_title:
paper_url += i.get_attribute('id')
break
if paper_url == r'https://ieeexplore.ieee.org/document/': #没找到
return ''
# 进入文献页面
self.browser.get(paper_url)
# 等待加载bib按钮
for i in range(100):
try:
element=self.browser.find_element_by_css_selector("[class='layout-btn-white cite-this-btn']")
element.click()
break
except:
sleep(0.1)
# 点击bibtex
for i in range(100):
try:
element=self.browser.find_element_by_css_selector("[class='modal-dialog']")
element=element.find_elements_by_css_selector("[class='document-tab-link']")[1]
element.click()
break
except:
sleep(0.1)
for i in range(100):
try:
self.browser.find_element_by_css_selector("[class='text ris-text']")
break
except:
sleep(0.1)
sleep(2)
bib = self.browser.find_element_by_css_selector("[class='text ris-text']").text
return bib def get_bib_from_google_scholar(self, paper_title):
strto_pn=parse.quote(paper_title)
url = self.gg_search_url + strto_pn
self.browser.get(url)
#等待词条加载
for i in range(100):
try:
element=self.browser.find_element_by_css_selector("[class='gs_r gs_or gs_scl']")
element=element.find_element_by_css_selector("[class='gs_fl']")
element=element.find_element_by_css_selector("[class='gs_or_cit gs_nph']")
element.click()
break
except:
sleep(0.1)
for i in range(100):
try:
element=self.browser.find_element_by_id("gs_citi")
element=element.find_element_by_css_selector("[class='gs_citi']")
element.click()
break
except:
sleep(0.1)
for i in range(100):
try:
bib = self.browser.find_element_by_tag_name('pre').text
break
except:
sleep(0.1)
return bib def get_bib(self, paper_title):
bib = self.get_bib_from_IEEE(paper_title)
if bib != '':
return "IEEE", bib
return "Google", self.get_bib_from_google_scholar(paper_title) driver_path = r'C:/chromedriver/chromedriver' # 浏览器驱动位置
option_path = r"C:/Users/Administrator/AppData/Local/Google/Chrome/User Data/" # 使浏览器能用你自定义的设置,否则Selenium创建的浏览器对象是默认设置,一些插件就不能用了
ie_search_url = r'https://ieeexplore.ieee.org/search/searchresult.jsp?newsearch=true&queryText=' # 在执行代码之前,先打开IEEE官网的搜索页面,把类似的网址复制到这里,等号=后面就是一会儿要搜索的内容
gg_search_url = r'https://scholar.google.com/scholar?hl=zh-CN&as_sdt=0%2C5&inst=1597255436240989024&q=' # 谷歌学术也是一样
get_bibs = GetBibs(driver_path, option_path, ie_search_url, gg_search_url)
#%% **********************以上定义爬虫对象,以下开始爬取*******************************
paper_titles = { # 要爬取的论文,key用于标记,value是论文题目。下面是一些样例
"ESPCN":'Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network',
"Sparse_Coding":'Image Super-Resolution Via Sparse Representation',
"ESRGAN":'ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks',
"EnhanceNet":'EnhanceNet: Single Image Super-Resolution Through Automated Texture Synthesis',
'Meta-SR': 'Meta-SR: A Magnification-Arbitrary Network for Super-Resolution',
'SAN': 'Second-Order Attention Network for Single Image Super-Resolution',
} for k in paper_titles.keys():
source, bib = get_bibs.get_bib(paper_titles[k])
print(source+":",k)
print(bib)
print()

  IEEE与谷歌学术可能需要VPN,在爬之前要先做好准备。另外IEEE还需要登录机构账号,在此之前也要先登录好。

使用Selenium从IEEE与谷歌学术批量爬取BibTex文献引用的更多相关文章

  1. 爬虫 (4)- Selenium与PhantomJS(chromedriver)与爬取案例

    Selenium文档 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器 ...

  2. 爬虫新手学习2-爬虫进阶(urllib和urllib2 的区别、url转码、爬虫GET提交实例、批量爬取贴吧数据、fidder软件安装、有道翻译POST实例、豆瓣ajax数据获取)

    1.urllib和urllib2区别实例 urllib和urllib2都是接受URL请求相关模块,但是提供了不同的功能,两个最显著的不同如下: urllib可以接受URL,不能创建设置headers的 ...

  3. from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)

    使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...

  4. 从0实现python批量爬取p站插画

    一.本文编写缘由 很久没有写过爬虫,已经忘得差不多了.以爬取p站图片为着手点,进行爬虫复习与实践. 欢迎学习Python的小伙伴可以加我扣群86七06七945,大家一起学习讨论 二.获取网页源码 爬取 ...

  5. selenium+谷歌无头浏览器爬取网易新闻国内板块

    网页分析 首先来看下要爬取的网站的页面 查看网页源代码:你会发现它是由js动态加载显示的 所以采用selenium+谷歌无头浏览器来爬取它 1 加载网站,并拖动到底,发现其还有个加载更多 2 模拟点击 ...

  6. Python批量爬取谷歌原图,2021年最新可用版

    文章目录 前言 一.环境配置 1.安装selenium 2.使用正确的谷歌浏览器驱动 二.使用步骤 1.加载chromedriver.exe 2.设置是否开启可视化界面 3.输入关键词.下载图片数.图 ...

  7. python 批量爬取四级成绩单

    使用本文爬取成绩大致有几个步骤:1.提取表格(或其他格式文件——含有姓名,身份证等信息)中的数据,为进行准考证爬取做准备.2.下载准考证文件并提取出准考证和姓名信息.3.根据得到信息进行数据分析和存储 ...

  8. python动态网页爬取——四六级成绩批量爬取

    需求: 四六级成绩查询网站我所知道的有两个:学信网(http://www.chsi.com.cn/cet/)和99宿舍(http://cet.99sushe.com/),这两个网站采用的都是动态网页. ...

  9. 网络爬虫——针对任意主题批量爬取PDF

    |本文为博主原创,转载请说明出处 任务需求:要求通过Google针对任意关键字爬取大量PDF文档,如K-means,KNN,SVM等. 环境:Anaconda3--Windows7-64位--Pyth ...

随机推荐

  1. 八戒转世投胎竟然是Java设计模式:桥接模式

    目录 示例 代码实例 桥接模式 定义 意图 主要解决问题 何时使用 优缺点 八戒转世投胎的故事 示例 请开发一个画图程序,可以画各种颜色不同形状的图形,请用面向对象的思 想设计图形 分析: 1.比如有 ...

  2. 老Python总结的字典相关知识

    字典 Python中的字典(dict)也被称为映射(mapping)或者散列(hash),是支持Python底层实现的重要数据结构. 同时,也是应用最为广泛的数据结构,内部采用hash存储,存储方式为 ...

  3. netcore获取配置文件的内容

    结合了好几个哥们的写法,最终我使用了这个版本,现在把我这个版本的写出来,如果该版本和您的版本类似或者一样,那可能是借鉴您的 using Microsoft.AspNetCore.Hosting; us ...

  4. hdu4280 最大流DINIC

    题意:       x最小的到x最大的点同一时间的最大运输量. 思路:       裸的最大流,不解释,注意一点,记得加上防爆栈. #pragma comment(linker, "/STA ...

  5. hdu4994 博弈,按顺序拿球

    题意:       给你n堆东西,两个人博弈的去拿,每次最少一个,最多是一堆,必须按顺序那,也就是只有把第一堆的东西拿完了才能去拿第二堆东西,谁先拿完谁胜,问新手是否能胜利. 思路:       显然 ...

  6. windows-DLL注入

    DLL注入     刚刚整理的代码注入(远程线程注入)现在整理这个DLL注入,DLL注入比较常用,相比远程代码注入DLL注入没有什么太多的限制,而且实现起来比较简单,当然远程线程需要注意的问题DLL很 ...

  7. 2020年电子设计大赛F题

    挺简单前一百分得了九十多 当然主要是队友很给力 1 温度判别 MLX90614DCC,然后测温拟合吧...从五十度到三十度平均一次要测一个半小时...这是真的痛苦...然后虽然文件里面说自带测温工具, ...

  8. 【jQuery】精细学习记录

    [jQuery]精细学习记录 基础 基本语法: $(选择器).action(回调函数); $/jQuery //jQuery核心函数 $(选择器) //获得的jQuery对象 jQuery核心 - j ...

  9. 【小技巧】Eclipse 中创建Maven项目后没有WEB-INF文件夹以及web.xml文件

    懒得截图了,一张图配下面步骤搞定. 1.右键项目,选择propertities后选择图中①(被遮住了): 2.先不②勾选去掉,点击Apply:然后在把②处勾选上.此时④位置会出现东东,点击蓝色超链接. ...

  10. (9)MySQL进阶篇SQL优化(InnoDB锁-记录锁)

    1.概述 InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的.InnoDB这种行锁实现特点意味着:只有通过索引条件检索 ...