使用Selenium爬虫批量下载AlphaFold数据库中的PDB文件

注意:本方法使用了python,下载速度一般,如果需要更快的大批量下载可以考虑使用其他方法,例如FTP

Alphafold数据库其实提供了许多物种的蛋白质组:

AlphaFold Protein Structure Database

但是如果你搜索的物种不在这个列表中,或者你想要根据关键词搜索一些内容,可以考虑本方法:

首先获取蛋白质ID列表,因为Uniprot数据库和AlphaFold数据库有联动,我们可以先在Uniprot上进行下载蛋白质的序列文件

然后下载fasta,将文件保存为xxxx_protein.fasta

运行以下代码,会生成这些蛋白质ID所对应的alphafold数据库pdb文件的下载连接,并将其保存到url_list.txt文件中:

with open("xxxx_protein.fasta","r") as fin:with open("url_list.txt","w+") as fout:lines = fin.readlines()for line in lines:if line.startswith(">"):url = "https://alphafold.ebi.ac.uk/files/AF-"+line.split("|")[1]+"-F1-model_v4.pdb\n"fout.write(url)fout.close()
fin.close()

接着我们就可以使用selenium,逐一访问这些网址,就可以下载文件了
当然,运行下列代码的时候先需要pip install selenium:

(这里的webdriver可以选取你电脑上已经安装好的浏览器,selenium具体支持的浏览器可以在官方文档中查看:支持的浏览器列表 | Selenium)

from selenium import webdriverwith open('url_list.txt', 'r') as f:urls = f.readlines()driver = webdriver.Edge()i=0for url in urls:i+=1print(i)result = driver.get(url)

但是仍然可能有一些蛋白质会因为网络问题下载失败,出现这种奇奇怪怪的名称:

这里提供了一个check代码,来继续把未完成下载的蛋白质下载完成:

import os
from selenium import webdriver
# 这里填写你的Edge浏览器的默认下载路径
dir_path = "C:\\Users\\用户名\\Downloads\\"
st = set()
with open('url_list.txt', 'r') as f:file_list = os.listdir(dir_path)for filename in file_list:if filename.startswith("AF"):st.add(filename.split("-")[1])urls = f.readlines()driver = webdriver.Edge()for url in urls:pid = url.split("/")[-1].split("-")[1]if pid not in st:print(pid)result = driver.get(url)

当然,还有一些蛋白质在AlphaFold数据库中没有预测数据的,我们还可以对比一下Uniprot和AlphaFold两个数据库的区别,下面以Bacillus subtilis (strain 168)这个物种为例:

这种没有结构数据的蛋白处理方式很多,你可以直接不管,也可以用在线的AlphaFold跑一遍(如果你确实需要研究一个物种的完整蛋白质组的话)

虽然说用了Selenium,但许多Selenium的特性功能并没有用到,因为AlphaFold网站加载很慢,如果直接在AlphaFold网站上搜索,去爬取这些蛋白质ID,反而会变得很慢。所以索性直接通过Uniprot网站上的数据来获取到蛋白质ID。这样甚至连路径解析都不需要用到,直接通过访问资源网页就解决了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【从0制作自己的ros导航小车:上位机篇】02、ros1多机通讯与坐标变换可视化

从0制作自己的ros导航小车 前言一、ros1多机通讯二、rviz可视化小车坐标系 前言 上节课完成了里程计数据与坐标变换发布,但是还没有测试,本节进行测试,测试之前需要知道一件事,上位机也就是开发板一般不做可视化用,因…

python包dateutil

python-dateutil 是一个 Python 第三方库,它提供了一系列强大的扩展来解析、操作、验证和格式化日期和时间。这个库是对 Python 标准库中 datetime 模块的补充,提供了许多实用的功能,比如解析各种格式的日期时间字符串、处理时区、计算相对日…

Python 教程(七):match...case 模式匹配

目录 专栏列表前言基本语法match 语句case 语句 模式匹配的类型示例具体值匹配类型匹配序列匹配星号表达式命名变量复杂匹配 模式匹配的优势总结 专栏列表 Python教程(一):环境搭建及PyCharm安装Python 教程(二)&…

网络边界安全强化:实战技巧与策略部署

引言 网络边界安全是企业网络安全防护的第一道屏障,其重要性不言而喻。随着网络攻击手段的日益多样化和复杂化,如何有效强化网络边界安全,成为业界关注的焦点。本文将深入探讨网络边界安全强化的实战技巧与策略部署,为企业提供一…

NASA:水瓶座官方发布的第 3 级辅助雷诺兹海面温度标准映射图像降序年度数据 V3.0

Aquarius Official Release Level 3 Ancillary Reynolds Sea Surface Temperature Standard Mapped Image Descending Annual Data V5.0 水瓶座官方发布的第 3 级辅助雷诺兹海面温度标准映射图像降序年度数据 V5.0 (AQUARIUS_L3_ANCILLARY_SST_SMID_ANNUAL_V5) 简介 水瓶座 3…

[PM]面试题-产品问题

产品是做什么的? 根据自己产品的情况回答 有什么样的竞品?差异化在哪里? 根据自己产品的情况回答 产品迭代周期是多久? 大版本的更新可能要1-2个月 功能优化或者问题修复随时迭代, 1-2天或者3-5天都有可能 产品是怎么盈利的?商业模式是什么? 根据自己产品的情况回…

关于swift- OC混编使用Pod遇到的2个错误

错误1 Cannot find interface declaration for UITableViewCell, superclass of "DEFUITalbleViewCell" Cannot find interface declaration for UIView, superclass of "DefUIView" Cannot find interface declaration for 系统类, superclass of "自…

jQuery 遍历

jQuery 遍历 引言 jQuery 是一个广泛使用的 JavaScript 库,它简化了 HTML 文档的遍历、事件处理、动画和 AJAX 交互。在本文中,我们将深入探讨 jQuery 的遍历功能,这是 jQuery 核心的一部分,允许开发者轻松地选择和操作 DOM 元素。 目录 jQuery 遍历简介选择器 基本选择…

vue3 解决数据最初始为空,页面出现空白或者默认值

1. 问题描述 存在一个数组 tabsBars,当我们判断其为空时,显示默认文本,当其异步获取数据后,显示正常内容。 const tabsBars ref([]);const getInfo async () > {const res await getListApi();tabsBars.value res.tabsLi…

关于vue-router的钩子函数(vue知识点/面试题)

Vue 2 中,Vue Router 提供了多个钩子函数(导航守卫)来控制路由的行为。这些钩子函数主要分为以下几类: 全局守卫(Global Guards) beforeEach:在每次路由切换前被调用。常用于验证用户身份或权…

2024年最新GPT 4o访问入口及使用指南

2024年最新GPT访问入口及使用指南 一、前言 随着人工智能技术的不断进步,GPT(Generative Pre-trained Transformer)作为一种强大的自然语言处理工具,已经广泛应用于各个领域。无论是写作、编程辅助,还是对话生成&…

17、服务和数据在微服务各层的协作

在微服务架构中,服务和数据的协作是确保系统高效运行和可维护性的关键。本章详细探讨了微服务架构中的服务视图和数据视图,帮助我们理解在运行过程中这些服务和实体在各层是如何协作的。 1、服务视图 微服务内有许多不同类型的服务,它们的实…

Golang | Leetcode Golang题解之第301题删除无效的括号

题目&#xff1a; 题解&#xff1a; func checkValid(str string, lmask, rmask int, left, right []int) bool {cnt : 0pos1, pos2 : 0, 0for i : range str {if pos1 < len(left) && i left[pos1] {if lmask>>pos1&1 0 {cnt}pos1} else if pos2 <…

FFmpeg实战 - 解复用解码

文章目录 前置知识音视频基础概念解复用、解码的流程分析FFMPEG有8个常用库 常见音视频格式的介绍aac格式介绍h264格式介绍flv格式介绍mp4格式介绍 FFmpeg解码解封装实战数据包和数据帧&#xff08;AVPacket/AVFrame&#xff09;AVPacket/AVFrame的引用计数问题API介绍注意事项…

vue3实现elementui表格操作栏宽度自适应

根据表格的Table-column 属性&#xff0c; 我们可以在操作栏中添加 :render-header"renderHeader" 然后通过js获取当前操作栏存在多少个按钮&#xff0c;去动态计算需要设置列宽为多少&#xff1b; <el-table-column fixed"right" :label"t(tabl…

实习日志2之windows上大模型(qwen2-7b)部署

一、模型部署 1、下载ollama(大模型本地部署工具)&#xff0c;并安装 下载网址&#xff1a;https://ollama.com/ ollama是大模型部署方案&#xff0c;对应docker&#xff0c;本质也是基于docker的容器化技术。 2、下载大模型 在命令框&#xff0c;如windows系统在cmd窗口输…

详解方向导数

详解方向导数 flyfish 方向导数是描述了函数在某一特定方向上的变化率。具体来说&#xff0c;给定一个多元函数 f ( x , y , z , … ) f(x, y, z, \ldots) f(x,y,z,…) 和一个方向向量 v \mathbf{v} v&#xff0c;方向导数表示函数 f f f 沿着向量 v \mathbf{v} v 方向的…

笔试练习day1

目录 数字统计题目解析解法(枚举数字拆分)代码 两个数组的交集题目解析解法哈希表代码 点击消除题目解析解法栈代码 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1f978;&#x1f97…

C++ //练习 16.5 为6.2.4节(第195页)中的print函数编写模板版本,它接受一个数组的引用,能处理任意大小、任意元素类型的数组。

C Primer&#xff08;第5版&#xff09; 练习 16.5 练习 16.5 为6.2.4节&#xff08;第195页&#xff09;中的print函数编写模板版本&#xff0c;它接受一个数组的引用&#xff0c;能处理任意大小、任意元素类型的数组。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&a…

SQL中有多少Statements

SQL&#xff08;Structured Query Language&#xff09;是一种用于管理和操作关系型数据库的标准编程语言。SQL语句的种类繁多&#xff0c;它们被设计来执行不同的数据库操作&#xff0c;如数据查询、数据更新、数据定义&#xff08;如表和索引的创建&#xff09;等。由于SQL语…