Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
高效获取UniProt数据库条目ID:应对动态加载与API应用实践_创想鸟

高效获取UniProt数据库条目ID:应对动态加载与API应用实践

高效获取UniProt数据库条目ID:应对动态加载与API应用实践

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

网页动态加载内容的挑战

在进行网页数据抓取时,开发者常会遇到一个普遍问题:尽管通过requests库成功获取了网页的html内容,但使用beautifulsoup等解析库却无法找到页面上明显存在的元素。这通常是因为目标网站采用了javascript动态加载内容的技术。这意味着当您使用requests.get()请求页面时,服务器返回的html文档可能只包含一个基础框架,而实际的数据(例如uniprot的条目id列表)是在浏览器端通过javascript执行异步请求(ajax/fetch)后才填充到页面中的。

对于UniProt网站,当我们尝试使用以下代码来提取条目ID时:

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")# 此时 links 将是一个空列表,因为包含 ID 的内容尚未加载

尽管print(res.text)能够显示HTML文本,但其中并不包含那些动态加载的标签。这是因为requests库只获取了服务器的原始响应,并未执行任何JavaScript代码。因此,BeautifulSoup在解析这个初始HTML时,自然无法找到动态生成的内容。

解决方案:利用UniProt REST API

面对动态加载内容,最稳健且推荐的解决方案是使用网站提供的官方API(Application Programming Interface)。API是网站为了方便开发者程序化访问其数据而设计的一套接口。UniProt提供了一个功能强大的REST API,允许用户直接查询和获取蛋白质数据,而无需进行网页解析。

1. 通过REST API进行基本搜索和ID提取

UniProt REST API的/uniprotkb/search端点允许我们根据查询条件搜索蛋白质条目,并指定需要返回的字段。这比模拟浏览器行为抓取网页要高效和稳定得多。

以下代码演示了如何使用UniProt REST API来搜索“wound healing”相关的条目,并提取它们的“primaryAccession”(即UniProt ID):

import requestsimport json # 用于处理JSON响应api_url = "https://rest.uniprot.org/uniprotkb/search"# 定义查询参数params = {    "fields": "accession,id,protein_name,gene_names,organism_name,length", # 指定需要返回的字段    "query": "(wound healing)", # 查询字符串    "size": 5 # 限制返回结果的数量,便于演示}try:    # 发送GET请求到API    response = requests.get(api_url, params=params)    response.raise_for_status() # 检查请求是否成功(状态码200)    # 解析JSON响应    data = response.json()    print("--- 提取的UniProt条目ID ---")    if "results" in data and data["results"]:        for r in data["results"]:            print(r["primaryAccession"])    else:        print("未找到匹配的条目。")except requests.exceptions.RequestException as e:    print(f"请求失败: {e}")except json.JSONDecodeError:    print("无法解析API响应为JSON。")

代码解析:

api_url: UniProt搜索API的基地址。params: 一个字典,包含了API请求的各种参数。fields: 指定您希望从每个条目中获取哪些信息,例如accession(主登录号,即ID)、id(条目ID)、protein_name等。query: 您的搜索关键词。size: 可选参数,用于限制返回结果的数量。requests.get(api_url, params=params): 发送带有指定参数的GET请求。response.raise_for_status(): 如果HTTP请求返回了错误状态码(如4xx或5xx),将抛出HTTPError异常。response.json(): 将API返回的JSON格式数据解析为Python字典。data[“results”]: UniProt API的响应通常包含一个results列表,其中每个元素代表一个匹配的蛋白质条目。r[“primaryAccession”]: 从每个条目字典中提取primaryAccession字段,这就是我们需要的UniProt ID。

示例输出:

--- 提取的UniProt条目ID ---O00622Q15746Q04912P08581Q61176

2. 模拟“下载”功能进行批量数据流式获取

UniProt API还提供了/uniprotkb/stream端点,它更适合于批量下载大量数据,类似于网站上的“下载”按钮功能。通过这个端点,您可以指定下载格式(如JSON、FASTA、TXT等)和是否压缩。

以下代码展示了如何使用/stream端点来获取“wound healing”查询的所有结果,并以JSON格式返回:

import requestsimport jsonapi_url_stream = "https://rest.uniprot.org/uniprotkb/stream"# 定义流式下载参数params_stream = {    "compressed": "false", # 不压缩    "download": "true",    # 模拟下载行为    "format": "json",      # 指定下载格式为JSON    "query": "(wound healing)",    "size": 5 # 限制返回结果的数量,便于演示}try:    # 发送GET请求到API    response_stream = requests.get(api_url_stream, params=params_stream)    response_stream.raise_for_status()    # 解析JSON响应    data_stream = response_stream.json()    print("n--- 通过流式API提取的UniProt条目ID ---")    if "results" in data_stream and data_stream["results"]:        for r in data_stream["results"]:            print(r["primaryAccession"])    else:        print("未通过流式API找到匹配的条目。")except requests.exceptions.RequestException as e:    print(f"流式请求失败: {e}")except json.JSONDecodeError:    print("无法解析流式API响应为JSON。")

代码解析:

api_url_stream: UniProt流式API的基地址。params_stream:compressed: 是否压缩返回数据。download: 设为true以模拟下载。format: 指定输出格式,这里是json。其余部分与基本搜索类似,都是处理JSON响应并提取primaryAccession。

注意事项与最佳实践

优先使用官方API: 当目标网站提供API时,始终优先选择API而非网页抓取。API通常更稳定、数据结构化、且不易受到网站UI变动的影响。查阅API文档: 在使用任何API之前,务必详细阅读其官方文档。文档会说明可用的端点、参数、返回格式、认证方式(如果需要)、以及重要的速率限制(Rate Limit)。了解速率限制对于避免IP被封锁至关重要。错误处理: 在实际应用中,务必添加健壮的错误处理机制,例如使用try-except块来捕获网络请求失败、JSON解析失败等异常。识别动态内容: 如果您不确定某个网站的内容是否是动态加载的,可以使用浏览器的开发者工具。在“Network”(网络)选项卡中,刷新页面并观察是否有XHR或Fetch请求加载了您所需的数据。这些请求的URL通常就是您可以直接调用的API端点。遵守服务条款: 在进行任何数据抓取或API调用时,请务必遵守网站的服务条款和使用政策。

总结

通过本教程,我们理解了传统网页抓取方法在面对JavaScript动态加载内容时的局限性,并掌握了利用UniProt REST API高效、稳定地获取蛋白质条目ID的方法。这种方法不仅解决了动态内容的问题,还提供了更结构化、更易于处理的数据。在未来的数据获取任务中,识别动态内容并优先考虑使用官方API将是您提升效率和代码鲁棒性的关键。

以上就是高效获取UniProt数据库条目ID:应对动态加载与API应用实践的详细内容,更多请关注创想鸟其它相关文章!

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

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
高效获取Django关联模型数据字典:元编程与自定义方法
上一篇 2025年12月14日 09:19:24
Django模型关联数据动态提取与字典化:构建通用数据导出方法
下一篇 2025年12月14日 09:19:33

相关推荐

  • 360浏览器医生在哪里打开_360浏览器医生功能启动入口介绍

    360浏览器异常时可通过四种方式启动“浏览器医生”:1.点击右下角医疗箱图标;2.按下F1键;3.从菜单栏“帮助”中进入;4.在设置的扩展功能里查找,随后选择修复模式并重启浏览器。 如果您发现360浏览器运行异常,例如网页加载缓慢、频繁弹窗或无法正常打开页面,可以借助“浏览器医生”功能进行检测与修复…

    2026年9月21日
    000
  • 如何为iPhone14下载最新固件?官方渠道操作教程

    首先通过设备设置检查更新,进入“设置-通用-软件更新”下载并安装;若失败,可连接电脑使用Mac的访达或Windows的iTunes进行固件下载与更新。 如果您尝试为您的iPhone 14获取最新的系统版本,但无法通过常规方式完成下载,可能是由于网络连接不稳定或设备存储空间不足。以下是通过官方渠道进行…

    2026年9月21日
    100
  • Intel前CEO:公司过去15年连锁犯错、18A是重要里程碑

    10月14日,曾担任intel首席执行官的帕特·基辛格(pat gelsinger)在近期一次采访中分享了他对自身在intel职业生涯的反思,并就当下ai产业的发展态势表达了个人见解。 他坦言,Intel“在过去十五年间接连做出多项错误的战略选择”, 这使得公司进入了漫长的重建期,同时也失去了曾经在…

    2026年9月21日
    600
  • 抖音直播间管理员可以设置几个?做主播管理员有收入吗

    抖音直播已成为当前最火爆的社交形式之一。作为直播间的管理核心,抖音直播间管理员在维护秩序、提升体验以及推动直播间发展方面发挥着重要作用。本文将围绕抖音直播间管理员的设置要点进行详细解析,帮助管理者更有效地运营直播间,构建高质量的直播环境。 一、抖音直播间管理员设置关键点 1. 门槛设定 为了保证直播…

    2026年9月21日
    000
  • VSCode如何自定义文件图标 VSCode资源管理器视觉优化的技巧

    自定义vscode文件图标需安装图标主题扩展,如material icon theme;2. 通过扩展市场安装后,在文件图标主题设置中启用;3. 选择主题时应考虑视觉风格、图标覆盖率、辨识度和更新频率;4. 可结合文件嵌套、隐藏文件夹、缩进指南等设置优化资源管理器视觉体验;5. 自定义图标对性能影响…

    2026年9月21日
    000
  • 手机淘宝怎么加热区?淘宝怎么添加热区

    需商家账号在淘宝商家中心或旺铺PC端设置热区,普通买家无权限。①手机端:登录商家中心→店铺管理→详情页装修→选图添加热点→设链接保存;②PC端:登录旺铺官网→店铺装修→用图片热区工具划区域→设跳转链接→发布;③确认账号为已开店的商家主/子账号,未开通需申请店铺并订购旺铺服务。 如果您在使用手机淘宝时…

    2026年9月21日
    000
  • 如何使用Scikit-learn训练AI大模型?传统机器学习与深度结合

    如何使用Scikit-learn训练AI大模型?传统机器学习与深度结合如何使用Scikit-learn训练AI大模型?传统机器学习与深度结合如何使用Scikit-learn训练AI大模型?传统机器学习与深度结合如何使用Scikit-learn训练AI大模型?传统机器学习与深度结合

    Scikit-learn在大型模型预处理中的核心作用是提供数据清洗、特征缩放、编码和降维等工具,确保输入数据高质量且规范化,为深度学习模型奠定坚实基础。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 说实话,如果你的目标是纯粹地“训练AI大…

    2026年9月21日 • 用户投稿
    700
  • win11复制大文件时速度突然掉到0怎么办_win11大文件复制速度突然掉0解决方法

    传输速度降为0可尝试Robocopy命令、修复磁盘错误、更新驱动、关闭占用程序或格式化为NTFS。首先使用Robocopy无缓冲复制避免卡顿;其次通过chkdsk扫描修复文件系统错误;接着在设备管理器中更新USB与存储控制器驱动;然后通过任务管理器关闭高磁盘占用的后台进程;最后若目标盘为FAT32/…

    2026年9月21日
    100
  • Online Config VS Code

    Online Config VS CodeOnline Config VS CodeOnline Config VS CodeOnline Config VS Code

    run vs view Install Code Server Update Code Server Database:It is recommended to create a Docker container for the database. Code Language: JavaScript…

    2026年9月21日 • 用户投稿
    000
  • Java Collections.sort与Collections.reverse的使用区别

    Collections.sort用于排序,基于元素值比较,结果有序,默认升序,可自定义规则;2. Collections.reverse仅反转列表顺序,不比较元素,时间复杂度O(n);3. 两者功能不同,不可替代,按需选择使用。 Java 中 Collections.sort 和 Collectio…

    2026年9月21日
    100
  • MediBangPaint中AI生成图片如何导出?快速保存图像的详细方法

    答案:导出AI生成图片应优先选择PNG格式以保留细节和色彩。通过“文件”菜单中的“导出(单层)”功能,可将图像保存为PNG或JPG等格式,其中PNG为无损压缩,适合高质量输出;若需透明背景或后续编辑,更应选用PNG。清晰度不足常因原始分辨率低、过度放大或JPG压缩过度所致,建议导出时设置高质量(80…

    2026年9月21日
    200
  • 百度搜索app如何启用搜索关键词过滤_百度搜索app关键词过滤的设置技巧

    可通过减号语法排除关键词,如“健身教程 -广告”;用双引号实现精确匹配,如”瑜伽初学者教程”;结合site:指令限定范围,如Python入门教程 site:zhihu.com,提升搜索精准度。 如果您在使用百度搜索App时,希望减少不相关或不想要的搜索结果,可以通过设置关键词…

    2026年9月21日
    800
  • Bun 1.3 正式发布

    2025年10月10日,高性能 javascript 运行时 bun 发布了 1.3 版本。这是 bun 项目迄今为止最重大的版本更新,标志着 bun 从单纯的运行时工具演变为一个功能完备的全栈 javascript 开发平台。 从运行时到全栈平台的跨越 Bun 1.3 的核心突破在于将前端开发能力…

    2026年9月21日
    000
  • Java中多态的基本实现方法

    多态允许同一接口调用不同实现,通过继承与方法重写实现。1. 子类重写父类方法,如Animal的makeSound被Dog和Cat重写;2. 父类引用指向子类对象,运行时动态绑定,如Animal myPet = new Dog()调用Woof;3. 方法参数使用父类类型,提升代码复用,如playWit…

    2026年9月21日
    000
  • win10夜灯模式是灰色的打不开怎么办_win10夜灯模式无法启用解决方法

    首先重新安装显卡驱动,其次通过注册表修改修复功能状态,最后执行系统文件检查与修复,可解决夜灯模式开关灰色无法启用的问题。 如果您在尝试开启Windows 10的夜灯模式时,发现其开关呈现灰色且无法点击激活,这通常意味着系统底层服务或驱动程序存在问题,导致该功能被禁用。以下是几种有效的解决方法。 本文…

    2026年9月21日
    100
  • MySQL字段注释快速补全方法_Sublime脚本自动生成标准文档结构

    MySQL字段注释快速补全方法_Sublime脚本自动生成标准文档结构MySQL字段注释快速补全方法_Sublime脚本自动生成标准文档结构MySQL字段注释快速补全方法_Sublime脚本自动生成标准文档结构MySQL字段注释快速补全方法_Sublime脚本自动生成标准文档结构

    要快速补全mysql字段注释,可通过sublime text编写python脚本实现自动化;1. 脚本获取表名,可手动输入或从当前sql文件解析;2. 通过subprocess调用mysql命令行获取show full columns信息;3. 解析输出内容,提取字段名和现有注释;4. 生成alte…

    2026年9月21日 • 用户投稿
    100
  • iPhone13pro系列如何开启自动微距

    要使用iPhone 13 Pro系列的自动微距功能,首先需确保设备系统已升级至最新版本。系统更新通常包含功能优化与性能提升,有助于更稳定地支持自动微距拍摄。 开启该功能非常简单,无需手动设置。当你打开相机应用并靠近拍摄对象时,设备会智能识别距离,并自动切换至微距模式。此时,屏幕上将显示一朵小花图标,…

    2026年9月21日
    000
  • 更偏向移动端?Steam新版商店页引国外玩家批评

    今日,v社正式上线全新版本的steam商店界面,标志着此前长期测试的新设计终于全面启用。新版首页在视觉上更加开阔、简洁,将原先位于左侧的游戏分类菜单与顶部的蓝色导航栏整合为统一的顶部导航条,支持用户直接浏览竞速、潜行等具体游戏类型,并结合用户偏好实现个性化内容推荐。整体布局更贴近移动端操作逻辑,页面…

    2026年9月21日
    000
  • safari浏览器如何设置链接在新窗口而不是新标签页打开_safari浏览器链接新窗口打开设置

    通过快捷键或第三方扩展可实现Safari中链接在新窗口打开:1. 按住Command键点击链接可临时在新窗口打开;2. 使用AppleScript脚本通过“自动操作”创建快速操作以新建Safari窗口;3. 网站自身代码如window.open()会强制新窗口打开;4. 安装可信扩展如“Link i…

    2026年9月21日
    000
  • PHP三元运算符HTML输出_PHP三元运算符HTML内容输出

    PHP三元运算符用于在HTML中简洁输出条件内容,基本语法为“条件 ? 值1 : 值2”;2. 常用于动态显示文本、属性或样式,如根据$active输出“启用”或“禁用”;3. 可嵌入HTML标签设置class、disabled等属性,示例中根据登录状态显示不同按钮。 PHP三元运算符用于在HTML…

    2026年9月21日
    200

发表回复

登录后才能评论
关注微信