Python统计论文被引量和自引量
昨天替老板写了一个统计文章被引次数的脚本,现在分享给大家,开源万岁!这里的引用统计是基于Web of Science的数据库,这就意味着你必须有Web of Science的账号或者你所在的ip可以正常使用它。适用于广大理工科的研究工作者,适用于英文主流期刊(SCI)的统计。中文核心要看Web of Science具体的收录情况。
所需库
wos
这个是Web of Science提供的数据接口,它有一个非常难读的官方说明,感兴趣的同学可以试一试:
http://ipscience-help.thomsonreuters.com/wosWebServicesLite/WebServicesLiteOverviewGroup/Introduction.html
re
这个库anaconda自带,可以用来处理字符串。我们扒取的各种网页信息实际上都是字符串,所以这个库在写爬虫的时候非常有用。
xml
这个库同样anaconda自带,wos返回的各种数据均是以xml格式存储的,所以需要用这个库处理。
sys
我们只调用了其中的exit函数,用来终止脚本。
代码实现
这个代码貌似很有用的样子,很多人哭着喊着想要,所以我就贴在这里。使用的话请注明作者和出处,禁止用于商业用途,开源就是开源!
# -*- coding: utf-8 -*-
"""
Created on Tue Feb 26 14:43:45 2019
@author: danphnis
"""
from wos import WosClient
import wos.utils
import xml.dom.minidom
import re
import sys
class paper:
def __init__(self,xml_txt,r):
self.year = int(xml_txt.childNodes[r*2-1].childNodes[r*1-1].childNodes[r*2-1].getAttribute('pubyear'))
self.uid = xml_txt.childNodes[r*1-1].firstChild.data
self.title = xml_txt.childNodes[r*2-1].childNodes[r*1-1].childNodes[r*3-1].childNodes[-r].firstChild.data
print('已找到文章,开始处理,请核对文章名及DOI:')
print(self.title)
doi_temp = '未找到doi'
if xml_txt.childNodes[r*3-1].childNodes[r*2-1].childNodes[r*1-1].childNodes[-r].hasAttribute('value'):
doi_temp = xml_txt.childNodes[r*3-1].childNodes[r*2-1].childNodes[r*1-1].childNodes[-r].getAttribute('value')
self.doi = doi_temp
print(self.doi)
self.loc = []
self.org = []
temp = xml_txt.childNodes[r*2-1].childNodes[r*2-1].childNodes[r*5-1]
for i in range(int(temp.getAttribute('count'))):
self.loc.append(temp.childNodes[r*i+r-1].childNodes[r*1-1]