从UniProt数据库搜索结果中提取Entry ID的教程

从uniprot数据库搜索结果中提取entry id的教程

从UniProt数据库搜索结果中提取Entry ID的教程

如上文摘要所述,本文将指导读者如何从UniProt数据库的搜索结果页面中提取Entry ID。 许多现代网站,包括UniProt,使用JavaScript动态加载数据。这意味着你直接通过requests库获取的HTML内容可能不包含你想要抓取的信息,因为这些信息是在页面加载后通过JavaScript添加的。 因此,直接解析通过requests获取的HTML源代码可能无法找到目标数据。

问题分析

原始代码尝试使用requests和BeautifulSoup直接解析UniProt搜索结果页面的HTML。

import requestsfrom bs4 import BeautifulSoupurl = "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 requestsapi_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"])

代码解释:

api_url = “https://rest.uniprot.org/uniprotkb/search”: 定义了UniProt API的URL。params: 定义了请求参数。fields: 指定了要返回的字段,包括accession(Entry ID),reviewed,id,protein_name,gene_names,organism_name和length。query: 定义了搜索查询,这里是”(wound healing)”。data = requests.get(api_url, params=params).json(): 使用requests.get()方法发送GET请求,并将返回的JSON数据解析为Python字典。for r in data[“results”]:: 遍历结果列表。print(r[“primaryAccession”]): 打印每个结果的primaryAccession,即Entry ID。

模拟“下载”按钮并保存为JSON

如果你需要获取所有结果并将其保存为JSON格式,你可以使用以下代码,它模拟了UniProt网站上的“下载”按钮的功能:

import requestsapi_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"])

代码解释:

api_url = “https://rest.uniprot.org/uniprotkb/stream”: 使用了不同的API端点,stream,用于下载数据。params: 定义了请求参数。compressed: 设置为”false”,表示不使用压缩。download: 设置为”true”,表示要下载数据。format: 设置为”json”,表示要以JSON格式下载数据。query: 定义了搜索查询,这里是”(wound healing)”。data = requests.get(api_url, params=params).json(): 使用requests.get()方法发送GET请求,并将返回的JSON数据解析为Python字典。# print(data): 取消注释此行可以打印所有下载的数据。for r in data[“results”]:: 遍历结果列表。print(r[“primaryAccession”]): 打印每个结果的primaryAccession,即Entry ID。

注意事项

API Rate Limiting: UniProt API可能有速率限制。如果你的请求过于频繁,可能会被限制访问。请确保你的代码在短时间内不会发送过多的请求。你可以通过查看API文档来了解速率限制的详细信息。Error Handling: 在实际应用中,你应该添加错误处理机制,例如使用try…except块来捕获requests.exceptions.RequestException异常,以便在请求失败时进行适当的处理。User-Agent: 建议在请求头中设置User-Agent,以便让服务器知道你的请求来自哪个应用程序。这可以帮助服务器更好地了解你的使用情况,并可能避免被误认为是恶意机器人。

总结

本教程展示了如何从UniProt数据库的搜索结果页面中提取Entry ID,并避免了直接解析HTML的问题。通过模拟JavaScript请求,我们可以更高效、更准确地获取所需的数据。同时,我们还演示了如何模拟“下载”按钮,将所有结果保存为JSON格式。希望本教程能够帮助你更好地理解和应用网络数据抓取技术。

以上就是从UniProt数据库搜索结果中提取Entry ID的教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1369093.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月14日 09:21:28
下一篇 2025年12月14日 09:21:44

相关推荐

  • Python中嵌套对象属性变更时的数据框自动更新策略

    本教程探讨在Python中,当数据框构建器内部的嵌套对象属性发生变化时,如何实现父级数据框的自动更新。通过引入分层管理类和明确的更新机制,我们展示了一种有效的方法来确保数据状态的一致性,避免手动调用更新函数,从而提升代码的可维护性和健壮性。 1. 引言:嵌套对象属性变更的挑战 在面向对象编程中,我们…

    好文分享 2025年12月14日
    000
  • 生成准确表达文章主题的标题 寻找区间内有效位最少的数字

    本文旨在提供一种高效的方法,用于在给定的整数区间内查找具有最少有效位的数字。有效位是指数字的最高有效位 (MSB) 和最低有效位 (LSB) 之间的位数。我们将探讨一种利用位运算和二分思想的优化算法,避免对区间内所有数字进行遍历和计算,从而显著提高查找效率。 在处理大规模数据或需要快速响应的场景中,…

    2025年12月14日
    000
  • 使用 FastAPI 实现三层架构处理复杂 Endpoint:服务设计考量

    在构建复杂的 FastAPI 应用时,采用三层架构(表现层、应用层、领域层)是一种常见的实践。然而,当某个 Endpoint 需要聚合来自多个不同服务的的数据时,例如一个 get_transaction Endpoint 需要用户、产品和销售信息,如何组织代码就成了一个需要仔细考虑的问题。常见的做法…

    2025年12月14日
    000
  • 在 FastAPI 中实现三层架构处理复杂 Endpoint:服务拆分策略

    在 FastAPI 中实现三层架构时,处理需要多个服务支持的复杂 Endpoint 的最佳实践。针对诸如“get_transaction”这类需要聚合用户、产品和销售数据的情况,分析了在应用层直接调用多个服务,还是创建一个专门的聚合服务两种方案的优劣,并提出了基于服务身份和存储的拆分策略建议,以提升…

    2025年12月14日
    000
  • FastAPI三层架构中复杂业务端点的数据聚合策略

    本文探讨在FastAPI三层架构中,当一个API端点需要整合来自多个独立服务的数据时,如何选择合适的架构模式。我们将分析在应用层直接聚合数据与创建独立聚合服务两种方案的优劣,并强调根据业务实体的独立性来决定服务职责边界,以实现更清晰、可伸缩且易于管理的系统设计。 理解复杂业务场景下的数据聚合挑战 在…

    2025年12月14日
    000
  • FastAPI三层架构中复杂端点多服务协作与聚合策略

    本文探讨在FastAPI三层架构中,如何有效处理依赖多个底层服务的复杂端点。文章对比了在应用层直接协调多个服务与创建专门的聚合服务两种策略,并强调了基于聚合数据“身份”和业务重要性进行决策的关键性,旨在提升系统可扩展性与可维护性。 三层架构概述与复杂场景挑战 在构建现代web服务时,三层架构(通常包…

    2025年12月14日
    000
  • 使用 Python API 获取 USDA 营养数据:突破 50 条记录的限制

    本文介绍了如何使用 Python 访问 USDA(美国农业部)的营养数据 API,并解决默认情况下只能获取 50 条记录的限制。通过分析 API 文档,了解分页机制和参数设置,我们将学习如何迭代所有页面,获取完整的数据集,并将其用于后续的数据分析和处理。本文提供详细的代码示例,帮助读者快速上手。 U…

    2025年12月14日
    000
  • Python利用USDA API获取完整营养数据:深度解析分页机制

    本教程旨在解决使用USDA食品数据中心(FDC)API时遇到的数据分页限制问题,特别是默认仅返回50条结果的情况。文章将详细解释API分页机制,并通过Python代码示例演示如何有效地利用pageSize和pageNumber参数,结合请求会话和错误处理,实现完整数据集的迭代获取与处理,最终导出至E…

    2025年12月14日
    000
  • 掌握USDA食品数据API分页获取完整营养信息教程

    本教程详细介绍了如何通过Python有效地从USDA食品数据API获取完整的营养事实数据。针对API默认返回结果受限(如50条)的问题,文章深入探讨了API分页机制,并提供了利用pageSize和pageNumber参数迭代获取所有数据项的解决方案。教程包含示例代码、错误处理和最佳实践,旨在帮助开发…

    2025年12月14日
    000
  • 深入理解与实现USDA FDC API数据分页获取

    本文旨在解决通过Python API获取USDA FDC营养数据时遇到的结果限制问题。我们将详细讲解API分页机制,介绍如何利用pageSize和pageNumber参数,并通过迭代请求实现完整数据集的检索,确保用户能够高效、准确地获取所有目标数据。 1. 理解API分页机制 在使用第三方API时,…

    2025年12月14日
    000
  • 计算图像像素平均亮度时出现不一致问题的解决方案

    本文旨在解决在使用OpenCV计算不同图像像素平均亮度时出现不一致的问题。通过分析问题代码,并结合实际案例,提供了一种更准确的计算图像平均亮度的方法,重点在于使用 cv2.imread 正确加载图像,并利用 numpy 提供的 mean() 函数进行计算,避免了潜在的类型转换和溢出问题。 在图像处理…

    2025年12月14日
    000
  • Python中字典怎么遍历 Python中字典遍历教程

    遍历字典默认是遍历键,可用.values()遍历值,.items()遍历键值对;遍历时修改字典会报错,应先复制键或用推导式生成新字典;大型字典推荐直接使用.keys()、.values()、.items()获取视图对象以节省内存;Python 3.7+字典有序,3.6及以前无序,需顺序时用Order…

    2025年12月14日
    000
  • python怎么读取csv文件_python数据处理基础教程

    首选pandas库读取CSV文件,因其功能强大且操作高效,适合数据分析;对于简单行操作,可使用内置csv模块,更加轻量灵活。 Python处理CSV文件,最直接也最常用的方式就是借助`pandas`库。它提供了一套高效且功能强大的工具集,能让你轻松地读取、操作和分析CSV数据。当然,如果只是简单的行…

    2025年12月14日
    000
  • 多算法聚类结果的合并策略与SQL实现:基于连通分量的传递闭包方法

    本文探讨了如何合并来自不同聚类算法、但作用于同一数据集的聚类结果。当不同算法的集群通过共享相同数据项而存在重叠时,需要将这些重叠集群进行传递性合并。文章将阐述此问题本质上是图论中的连通分量发现,并提供基于SQL和Python/PySpark的解决方案,重点讲解其逻辑、实现步骤及注意事项,以生成统一的…

    2025年12月14日
    000
  • Django模型中高效动态获取关联字段值并构建字典

    本教程详细阐述了在Django中如何高效地从主模型动态获取所有通过ForeignKey关联的子模型的特定字段值,并将其组织成一个结构化字典。通过利用ReverseManyToOneDescriptor进行模型内省,并结合在关联模型中自定义dump方法,我们能够自动化数据聚合过程,避免繁琐的手动查询,…

    2025年12月14日
    000
  • 高效获取UniProt数据库条目ID:应对动态加载与API应用实践

    本教程旨在解决从UniProt网站抓取条目ID时,因页面内容动态加载导致传统BeautifulSoup解析失败的问题。我们将深入分析失败原因,并提供一个更稳定、高效的解决方案:利用UniProt官方REST API直接获取所需数据,避免复杂的网页解析,确保数据提取的准确性和可靠性。 网页动态加载内容…

    2025年12月14日
    000
  • 高效获取Django关联模型数据字典:元编程与自定义方法

    本教程旨在解决如何高效地从Django父模型实例中,动态收集其所有关联模型(通过ForeignKey反向引用)的特定字段值,并将其整合到一个简洁的字典中。我们将通过利用Python的元编程技术来识别反向外键关系,并结合关联模型上的自定义方法来提取所需数据,从而避免手动逐一查询的繁琐与低效。 引言:高…

    2025年12月14日
    000
  • UniProt动态内容抓取:利用REST API高效获取生物序列条目ID教程

    本教程旨在解决从UniProt数据库动态加载页面抓取条目ID的常见问题。当传统的requests和BeautifulSoup组合无法获取JavaScript渲染的数据时,文章详细介绍了如何利用UniProt官方提供的REST API进行高效、可靠的数据提取。通过实例代码,演示了查询特定条目和模拟下载…

    2025年12月14日
    000
  • Django模型反向关联数据高效字典化教程

    本教程详细阐述了如何在Django中高效地将主模型的所有反向关联模型数据聚合到一个字典中。通过利用ReverseManyToOneDescriptor动态识别反向外键关系,并结合相关模型自定义的dump方法,我们能够自动化地提取指定字段的值,从而避免手动查询每个关联模型,极大地提升了数据获取的灵活性…

    2025年12月14日
    000
  • Python中复杂数据结构属性变更的级联更新机制

    本文探讨了在Python中,当复杂嵌套对象内部属性发生变化时,如何实现上层派生数据结构的自动更新。通过引入分层更新策略,结合@property装饰器和显式更新方法,构建了一个能够响应内部对象状态变化的级联更新机制,避免了手动调用更新方法的繁琐,提升了代码的健壮性和可维护性。 理解问题:为何属性变更未…

    2025年12月14日
    100

发表回复

登录后才能评论
关注微信