使用 python 使用 ORCID id 从 ORCID 搜索中提取凭据

Extracting credentials from ORCID seach with ORCID id using python

我重新编辑了我的问题,以便更好地解释我的问题

我正在尝试从 ORCID 数据库(科学文章和作者的数据库)中获取一个人的名字和姓氏。

我使用 requests_html.render() 访问 url:

"https://orcid.org/orcid-search/search?searchQuery=0000-0001-9077-1041" 并从中获取 html 代码。 Html 被解析并存储在 _text 列表中。 (如果你访问 url 你会看到它包含 ID 为“0000-0001-9077-1041”的 ORCID 数据库的搜索结果 - 姓名:“Andreas”和姓氏:“Leimbach”以及一些附加数据)。

我想从该页面的 html 代码中检索姓名文本。但是,当我多次 运行 程序时,有时 name 和 last name 在输出结果中,有时却没有。我希望程序总是检索相同的数据。

我使用以下 Python 脚本:

from requests_html import HTMLSession
from bs4 import BeautifulSoup

def GetCredentialsFromORCID(_id):
    base_url = "https://orcid.org/orcid-search/search?searchQuery=" + _id
    session = HTMLSession()
    response = session.get(base_url)
    response.html.render()
    
    soup = BeautifulSoup(response.html.html, 'lxml')
    _text = soup.get_text().strip().split()
    print("This is whet we got:\n", _text)

GetCredentialsFromORCID("0000-0001-9077-1041")

(尝试 运行 这段代码几次(5 - 10 次以上)然后自己看看)。

我只能假设这可能与此页面使用 JavaScript 这一事实有关,因为我一直收到:

Please enable JavaScript to continue using this application.

在控制台中,但我对此了解不多。

有人可以帮我吗?

该网页实际上会在初始搜索后继续 运行 扩展搜索。您可以 re-write 您的代码将扩展搜索用作初始调用,然后您只需要请求。你当然可以 re-work 下面的例子。它的结构与您的原始结构一样,只是接受一个 id 并返回一个响应。包括最少的错误处理。

def GetCredentialsFromORCID(_id):
    import requests
    
    r = requests.get(f'https://pub.orcid.org/v3.0/expanded-search/?start=0&rows=200&q=orcid:{_id}',
                    headers = {'User-Agent':'Mozilla/5.0', 'accept' : 'application/json'})
    try:
        return r.json()
    except Exception as e:
        return (f'Error for {_id}', e)
                            

print(GetCredentialsFromORCID("0000-0001-9077-1041"))