每次ESI数据更新之后,有些文章是热点文章,有些文章是研究前沿,就如下图中的红框标示出来的一样。但这部分数据,主要是研究前沿的文章,在ESI导出的数据中看不到。所以需要想办法获取这部分数据。

获取数据

  观察发现,每次翻页,都会有下面这样的一个请求包被发送,并获得json格式的数据,因此我们只要照着它的请求方式发送请求,就能获得相应的数据。

  直接发请求是拿不到数据的,需要带上cookies。所以我用selenium模拟浏览器登录,然后获取cookies。在用requests发请求的时候,带上这个cookies就可以拿到json格式的数据。具体代码如下,需要输入自己的ESI帐号和密码。

# esi_article_info.py
import requests
import time
import pandas as pd
from selenium import webdriverdef get_cookies():driver = webdriver.Edge()driver.get("https://access.clarivate.com/login?app=esi")driver.find_element_by_xpath('//*[@id="mat-input-0"]').clear()driver.find_element_by_xpath('//*[@id="mat-input-0"]').send_keys("帐号") # 输入自己的ESI帐号driver.find_element_by_xpath('//*[@id="mat-input-1"]').clear()driver.find_element_by_xpath('//*[@id="mat-input-1"]').send_keys("密码") # 输入自己的ESI密码driver.find_element_by_xpath('//*[@id="signIn-btn"]').click()# 等待窗口响应time.sleep(10)# 获取登录后的cookiescookies = driver.get_cookies()# 关闭浏览器driver.close()# print(cookies)cookie = {}# 将cookies保存成字典格式for items in cookies:cookie[items.get("name")] = items.get("value")return cookie# 学科列表,每个列表项用于添加到url中
subjectNameList = ['CLINICAL%20MEDICINE','MULTIDISCIPLINARY','CHEMISTRY','MATERIALS%20SCIENCE','ENGINEERING','BIOLOGY%20%26%20BIOCHEMISTRY','PHYSICS','MOLECULAR%20BIOLOGY%20%26%20GENETICS','NEUROSCIENCE%20%26%20BEHAVIOR','ENVIRONMENT%2FECOLOGY','SOCIAL%20SCIENCES%2C%20GENERAL','PLANT%20%26%20ANIMAL%20SCIENCE','GEOSCIENCES','PSYCHIATRY%2FPSYCHOLOGY','PHARMACOLOGY%20%26%20TOXICOLOGY','IMMUNOLOGY','AGRICULTURAL%20SCIENCES','COMPUTER%20SCIENCE','MICROBIOLOGY','ECONOMICS%20%26%20BUSINESS','SPACE%20SCIENCE','MATHEMATICS'
]# 先获取一次cookies
cookies = get_cookies()for subjectName in subjectNameList:# 把学科名字转换成小写,用于文件名以及输出当前正在处理的学科nameLower = subjectName.replace('%20', ' ').replace('%26', '&').replace('%2F', '_').replace('%2C',',').lower()# 字典列表,用于存放获取的数据,每一个条目以字典形式保存,作为其中一个列表项dictLi = []# cnt 用于记录当前处理进度cnt = 1page = 0while True:start = page * 50page = page + 1requestUrl = "https://esi.clarivate.com/IndicatorsDataAction.action?type=documents&author=&researchField="+subjectName+"&institution=&journal=&territory=&article_UT=&researchFront=&articleTitle=&docType=Top&year=&page="+str(page)+"&start="+str(start)+"&limit=50&sort=%5B%7B%22property%22%3A%22citations%22%2C%22direction%22%3A%22DESC%22%7D%5D"# 尝试发送get请求,有时候如果cookies过期,可能会请求不到,所以需要重新获取cookiestry:search_response = requests.get(requestUrl, cookies=cookies)except:cookies = get_cookies()# 如果页码超出了上限,会收到‘No results found’的响应,然后就可以退出while循环if search_response.text == 'No results found':break# 解析json格式数据re_text = search_response.json()list = re_text.get("data")# 保存这一页的数据到字典indDict中for item in list:indDict = {}for key, value in item.items():indDict[key] = valueprint(nameLower + ' ' + str(cnt)+" finished")cnt = cnt + 1dictLi.append(indDict)time.sleep(1)# dict转换成DataFrame并保存到excel里df = pd.DataFrame(dictLi)df.to_excel(nameLower + '.xlsx', index=False)

  用上面的脚本获取的每个学科的信息是单独存放的,一个学科一个文件。后面想把这些文件汇总成一个excel。为了区分每个文件的内容,我就新加了一列“subject”,用来记录学科名称,但后来发现这一步是多余的。

# merge.py
import pandas as pd
import os# 列出当前目录下的所有文件
files = os.listdir()
# dfList是一个用于存放DataFrame的列表,一个DataFrame对应一个excel文件
dfList = []
for file in files:# 排除当前目录下的一些文件if ( file != 'merge.py') & ( file != 'merge.xlsx') & ( file != 'esi_article_Info.py'):print(file + ' is processing')# 读取excel文件df = pd.read_excel(file)# 在excel的最后一列加上表头为‘subject’的一列,并把当前学科的名字填进去# 这一步在这里其实是多余的# 获取的原始数据里有一个条目就是researchFieldName# 和这里添加的内容是相同的 df.insert(df.shape[1], 'Subject', file.split('.')[0])# 把修改后的DataFrame加入到dfList列表中dfList.append(df)# 开始合成DataFrame
print('start merging')
alldata = pd.concat(dfList)
# 讲DataFrame的数据写入合成的excel
print('start writing')
alldata.to_excel('merge.xlsx', index=False, encoding='utf-8')

后续处理

  再来看一下我们获取的数据的信息:

  • highimpact
  • addresses
  • sourceOfBIB
  • articleId
  • researchFieldName
  • docTitle
  • countries
  • articleUT
  • institutions
  • researchFieldCode
  • citations
  • journal
  • rowSeq
  • DOI
  • authors
  • PMID
  • researchFrontName
  • hotpaper

  和我们从ESI直接导出的数据相比,这里的articleID实际上可以转换成Accession Number;这里的docTitle就是Article Name;这里的journal和sourceOfBIB构成了Source,sourceOfBIB里还包含了这篇文章发布的年份。所以用这种方式获取的数据能够完全包含直接从ESI导出的数据,并且还会多一些表征这篇文章是否是hot paper的信息和researchFrontName。
  最后导出的数据articleId和articleUT两列可能都会出现用科学计数法表示的情况,如果想要改成用文本的形式显示,可以用数据“分列”的方法。

  前两步可以直接点“下一步”,第三步选择列数据格式为“文本”,目标区域位置不用改,就是覆盖原来的数据。然后点击“完成”,数据就都会以“文本”的格式显示。

ESI文章详细信息获取相关推荐

  1. dwf怎么合成一个_文章详细信息

    韦春;杨莉琴;秦利军; 1:贵州大学农业生物工程研究院/山地植物资源保护与种质创新省部共建教育部重点实验室/生命科学学院 摘要(Abstract): BRs(Brassinosteroids)是植物体 ...

  2. flacs 安装教程_文章详细信息

    黄薇;宋碧英;曹婷;付敏;雷采凤;蒋世春;管蓉蓉;李崇义;胡盼; 1:陆军军医大学大坪医院眼科 摘要(Abstract): 目的探讨改良人工晶体安装方法在飞秒激光辅助白内障手术(FLACS)中的应用效 ...

  3. amplifer 项目_文章详细信息

    梁洁;张振洋;袁梦;张巧;施艳艳;王萌; Liang Jie;Zhang Zhenyang;Yuan Meng;Zhang Qiao;Shi Yanyan;Wang Meng;College of E ...

  4. PHP 获取服务器详细信息

    PHP 获取系统信息,PHP 获取服务器详细信息 获取系统类型及版本号:    php_uname()                                   (例:Windows NT ...

  5. python Intel Real Sense D435 异常检测与抛出(获取/打印异常详细信息 traceback.print_exc())

    文章目录 背景描述 首先熟悉一下python异常处理的几个关键字 摄像头USB断开异常 获取异常详细信息 背景描述 在摄像头运行的时候,有时候会遇到一些错误,比如帧传输错误引起的程序结束, 但更为严重 ...

  6. ceph-rest-api_快速检查REST API是否有效的方法-从清单文件中获取详细信息

    ceph-rest-api 在某些情况下,您可能想快速验证部署在开发,测试或生产环境中的REST API是否完全可以访问. 一种常见的实现方法是构建通用资源,该资源可提供例如已部署API的版本. 您可 ...

  7. 快速检查REST API是否有效的方法-从清单文件中获取详细信息

    在某些情况下,您可能想快速验证部署,开发,测试或生产环境中的REST API是否完全可以访问. 一种常见的实现方法是构建通用资源,该资源可提供例如已部署API的版本. 您可以手动触发对此资源的请求,或 ...

  8. sql 获取数据库字段信息_使用DBATools获取SQL数据库详细信息

    sql 获取数据库字段信息 In the series of articles on DBATools, (see TOC at the bottom) we are exploring useful ...

  9. Android获取歌曲详细信息

    Android获取歌曲详细信息 一.目标 二.实现方案 三.HTML方案 四.JSON方案 五.接下来 六.Finally 在<Android实现歌词笔记构思>时,构思了如何在笔记中添加歌 ...

最新文章

  1. ie9下console不兼容的问题
  2. 报表控件NCreport教程:报表高级设计
  3. 使用睡袋_在户外一个关乎睡眠的重要因素——睡袋
  4. 物理内存和虚拟内存的区别 及 什么是虚拟地址空间
  5. python发送文件到服务器_python 使用poster模块进行http方式的文件传输到服务器的方法...
  6. 着迷英语900句小结
  7. windows2003 iis 配置 php
  8. 说透Applet的数字签名之1——Applet及其运行
  9. [转] PHP之soap: soap使用例子
  10. 测试驱动开发心得体会
  11. 求递推数列通项的特征根法
  12. 正则表达式 '^[a-zA-Z0-9''-'\s]{1,30}$' 代表什么意思?
  13. 世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。
  14. JAVA计算机毕业设计校园闲置物品信息管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
  15. 13.第十四章.文档和配置管理
  16. 基于ESP8266的遥控小车
  17. 中国各阶级收入统计表,看看你在哪个阶级
  18. 有没有适合男的下班以后做的副业?
  19. 洛谷P2071 座位安排
  20. 教程篇(6.4) 05. 集成 ❀ SD-WAN ❀ Fortinet 网络安全架构师 NSE7

热门文章

  1. WSL下安装ubuntu 18.04 +meep进行FDTD仿真计算
  2. python实现中文的繁简转换
  3. 机器人操作系统ROS—深度相机+激光雷达实现vSLAM建图与导航 转载
  4. 张驰咨询:揭晓六西格玛管理(6 Sigma)长盛不衰的秘密
  5. 长江大学计算机基础试题,长江大学计算机基础考试试题
  6. 让电脑不被锁屏的方法,亲测有效
  7. 电气设计参考图纸,有高低压电气设计图纸、自控设计图纸和污水处理工程电气自控图
  8. 我家有女初长成,养在深闺人未识----写在SpaceBuilder开源前夜
  9. Java PDF转HTML、Word、图片、SVG、XPS、 PDF/A等格式文件
  10. c语言质数和合数事例,新人教版三年级数学下册第八单元单元教学计划