-1

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

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

我使用requests_html.render()访问网址:

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

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

我使用以下 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.

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

任何人都可以帮助我吗?

4

1 回答 1

1

该网页实际上在初始搜索之后继续运行扩展搜索。您可以重新编写代码以将该扩展搜索用作初始调用,然后您只需要请求。您当然可以重新设计下面的示例。它的结构很简单,就像您原来的结构一样,接受一个 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"))
于 2022-02-11T05:03:57.463 回答