
如上文摘要所述,本文将指导读者如何从UniProt数据库的搜索结果页面中提取Entry ID。 许多现代网站,包括UniProt,使用JavaScript动态加载数据。这意味着你直接通过requests库获取的HTML内容可能不包含你想要抓取的信息,因为这些信息是在页面加载后通过JavaScript添加的。 因此,直接解析通过requests获取的HTML源代码可能无法找到目标数据。
问题分析
原始代码尝试使用requests和BeautifulSoup直接解析UniProt搜索结果页面的HTML。
import requests
from bs4 import BeautifulSoup
url = "https://www.uniprot.org/uniprotkb?query=wound+healing"
res = requests.get(url)
res.raise_for_status()
soup = BeautifulSoup(res.text, "html.parser")
links = soup.find_all("a", class_="BqBnJ")
uniprot_ids = [link.get_text(strip=True) for link in links]
for uniprot_id in uniprot_ids:
print(uniprot_id)这段代码的问题在于,UniProt网站使用JavaScript动态加载搜索结果。当你使用requests.get(url)时,你获取的是初始的HTML结构,其中不包含通过JavaScript加载的数据。因此,soup.find_all("a", class_="BqBnJ")返回的是一个空列表。
解决方案:模拟JavaScript请求
为了解决这个问题,我们需要找到UniProt网站用于加载数据的API端点,并使用requests库模拟这个请求。通过分析UniProt网站的网络请求,我们可以找到一个名为https://rest.uniprot.org/uniprotkb/search的API端点。
以下代码演示了如何使用这个API端点来获取Entry ID:
import requests
api_url = "https://rest.uniprot.org/uniprotkb/search"
params = {
"fields": "accession,reviewed,id,protein_name,gene_names,organism_name,length",
"query": "(wound healing)",
}
data = requests.get(api_url, params=params).json()
for r in data["results"]:
print(r["primaryAccession"])代码解释:
模拟“下载”按钮并保存为JSON
如果你需要获取所有结果并将其保存为JSON格式,你可以使用以下代码,它模拟了UniProt网站上的“下载”按钮的功能:
import requests
api_url = "https://rest.uniprot.org/uniprotkb/stream"
params = {
"compressed": "false",
"download": "true",
"format": "json",
"query": "(wound healing)",
}
data = requests.get(api_url, params=params).json()
# show all data:
# print(data)
for r in data["results"]:
print(r["primaryAccession"])代码解释:
注意事项
总结
本教程展示了如何从UniProt数据库的搜索结果页面中提取Entry ID,并避免了直接解析HTML的问题。通过模拟JavaScript请求,我们可以更高效、更准确地获取所需的数据。同时,我们还演示了如何模拟“下载”按钮,将所有结果保存为JSON格式。希望本教程能够帮助你更好地理解和应用网络数据抓取技术。
以上就是从UniProt数据库搜索结果中提取Entry ID的教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号