How to Get WOS ID from DOI

Hongtao Hao / 2022-01-11

Many times, we need data from Web of Science, but we don’t know the WOS ID. If you know the paper DOI, then it’s easy to solve.

First of all, I recommend you to read these two posts by John Kitchin:

  1. Accessing web of science entry, citing and related articles from a doi in emacs
  2. Getting a WOS Accession number from a DOI

As John noted, if the paper’s DOI is 10.1021/jp047349j, for example, you can directly access the data of Web of Science regarding this paper via this link: And you can access the information about papers that have cited this paper via this link:

You can use this pattern for all other papers with different DOIs.

If you have to get the corresponding WOS ID, you can use this Python script I created:

# loading pacakages

import pandas as pd
import csv
import random
import requests
import re
import time
import numpy as np

# Suppose I have these DOIS and I want WOS ID
dois = ['10.1109/TVCG.2006.143',

# initialize a list of dictionaries
doi_wos_dict_list = []

def get_wos_id_from_doi(doi):
    """obtain wos id based on paper doi
       doi: paper doi
      The updated doi_wos_dict_list
    url = '' + doi
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
    response = requests.get(url=url, headers=headers)
    wos_url = response.history[-1].url
    wos_id_list = re.findall(r'(?<=2FWOS%3A)(.*)(?=%3F)', wos_url)
    # In case that the response does not contain WOS ID:
    if wos_id_list:
        wos_id = wos_id_list[0]
        wos_id = np.NaN
    doi_wos_dict = {
        'DOI': doi,
        'WOS ID': wos_id

# For each doi in the list, run the function 
for doi in dois:
    time.sleep(2+random.uniform(0, 2))
    print(f'{dois.index(doi)} is done')

# initiate a dataframe 
doi_wos_df_initiate = pd.DataFrame(columns=['DOI', 'WOS ID'])

def build_df_from_dict_list(df, dict_list):
    """build df from a list of dictionaries
       df: an empty df you just initiated
       dict_list: a list of dictionaries containing data you want to form a df
      The updated df
    for i in dict_list:
        df_1 = pd.DataFrame([i])
        df = df.append(df_1, ignore_index=True)
    return df

doi_wos_df = build_df_from_dict_list(doi_wos_df_initiate, doi_wos_dict_list)

doi_wos_df will contain the results.

After you know the WOS ID, for example,000270778900093, you can access this paper’s data via this link:

Last modified on 2022-01-31