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

news2024/11/17 8:46:02

注意:本方法使用了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 webdriver

with open('url_list.txt', 'r') as f:
    urls = f.readlines()
    driver = webdriver.Edge()
    i=0
    for url in urls:
        i+=1
        print(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.coloradmin.cn/o/1956070.html

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

相关文章

算法面试leadcode【经典150道】

88 合并两个有序数组 方法一 使用arraycopy排序 * 思路一:将nums2合并到nums1的尾部,再直接进行排序。* 使用arraycopy(int[]nums1,int m,int[] nums2,int n)* 方法来进行排序,* 从原数组的哪个位置,移动到原数组的哪个位置&#…

xxl-job适配达梦数据库并制作镜像、源码部署xxl-job

背景:因项目需要信创,需将原本的mysql数据库,改成达梦数据库 一、部署达梦数据库 1.1 部署达梦数据库服务 可参考:Docker安装达梦数据库_达梦数据库docker镜像-CSDN博客 PS:部署达梦数据库时,需加上大小…

Java | Leetcode Java题解之第300题最长递增子序列

题目&#xff1a; 题解&#xff1a; class Solution {public int lengthOfLIS(int[] nums) {int len 1, n nums.length;if (n 0) {return 0;}int[] d new int[n 1];d[len] nums[0];for (int i 1; i < n; i) {if (nums[i] > d[len]) {d[len] nums[i];} else {int…

19. Revit API: Parameter(参数)

一、前言 我们在前面或多或少提到也用到参数了&#xff0c;这篇便细讲一下。 首先&#xff0c;我们知道好多信息都藏在参数里&#xff0c;或者说可以从参数中获取。我们还能够通过调整参数的值&#xff0c;改变模型的形态&#xff0c;即族的参变。 其次&#xff0c;有时族上…

【CAN通讯系列4】CAN通讯如何传递信号?

在【CAN通讯系列3】如何学习CAN通讯&#xff1f;中举了一个例子&#xff1a;新能源汽车要实现驱动功能&#xff0c;先需要整车控制器VCU计算目标转速或扭矩请求等信号&#xff0c;再通过CAN通讯传递给电机控制器MCU&#xff0c;就这个例子继续探讨CAN通讯的基础问题。 1 CAN数据…

入门 PyQt6 看过来(案例)08~ 页面布局

主题&#xff1a;学习页面布局控件以及布局容器的使用&#xff08;理论知识&#xff09; 1 布局控件 PyQt6的布局方式包括绝对布局、水平布局、垂直布局、网格布局和表单布局。 绝对布局&#xff1a;直接设置控件对象在参考坐标中的位置水平布局&#xff1a;对加入的控件对象从…

引用的项目“xxxx/tsconfig.node.json”可能不会禁用发出。

vue3 报错&#xff1a; 引用的项目“xxxx/tsconfig.node.json”可能不会禁用发出。 解决&#xff1a; 进入对应的 json 文件&#xff1a; 修改&#xff1a; "noEmit": false 当 noEmit 设置为 false 时&#xff0c;TypeScript 编译器将根据项目配置生成相应的输出文…

【数据结构初阶】单链表经典算法题十道(详解+图例)—得道飞升(终篇)

hi &#xff01; 目录 9、 环形链表 || 10、随机链表的复制 终章 9、 环形链表 || 【图解】 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct ListNode *detectCy…

Live800:客户服务中的情感智能,建立深厚客户关系的秘诀

在当今竞争激烈的市场环境中&#xff0c;客户服务已成为企业脱颖而出的关键因素之一。而情感智能&#xff0c;作为客户服务中的重要组成部分&#xff0c;更是建立深厚客户关系、提升客户满意度的秘诀所在。优秀的客户服务不仅关乎问题的解决&#xff0c;更在于情感的交流与共鸣…

物联网云盒多路开关量模拟量转无线MQTT钡铼技术S275

物联网云盒多路开关量模拟量转无线MQTT技术在现代工业自动化和远程监测中扮演着关键角色。钡铼第四代RTU S275作为一款先进的物联网数据监测采集控制短信报警终端&#xff0c;集成了多种先进技术和功能&#xff0c;旨在提升远程数据采集与控制的效率和可靠性。 钡铼第四代RTU …

在Ubuntu 12.10上安装和使用tmux的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 关于 tmux tmux 是一个终端复用工具。它允许您使用多个虚拟终端访问 tmux 终端。 tmux 利用了客户端-服务器模型&#xff0c;这使您可…

unity3d:TabView,UGUI多标签页组件,TreeView树状展开菜单

概述 1.最外层DataForm为空壳编辑数据用。可以有多个DataForm&#xff0c;例如福利DataForm&#xff0c;抽奖DataForm 2.Menu层为左边栏层&#xff0c;每个DataForm可以使用不同样式的MenuForm预制体 3.DataForm中使用ReorderList&#xff0c;可排列配置 4.有定位功能&#xf…

网址导航系统PHP源码分享

1、采用光年全新v5模板开发后台 2、后台内置8款主题色&#xff0c;分别是简约白、炫光绿、渐变紫、活力橙、少女粉、少女紫、科幻蓝、护眼黑 3、可管理无数引导页主题并且主题内可以进行不同的自定义设置&#xff0c;目前内置16套主题 持续增加中… 4、可单独开发各种插件&a…

【OSCP系列】OSCP靶机-LemonSqueezy(原创)

【OSCP系列】OSCP靶机-LemonSqueezy 原文转载已经过授权 原文链接&#xff1a;Lusen的小窝 - 学无止尽&#xff0c;不进则退 (lusensec.github.io) 一、主机发现 二、端口扫描 1、快速扫描 2、全端口扫描 只有一个80端口 3、版本系统探测 80端口http的apache服务&#xff0…

2年社招冲击字节,一天三面斩获offer

在工作满两年的时间选择了求变&#xff0c;带着运气和实力以社招身份重新看今天的互联网环境&#xff0c;从结果看还是复合预期的。 整个面试的流程还挺快的。周中让招聘专员给投递了简历。问什么时候面试&#xff0c;申请了一个周日&#xff0c;直接安排三面。下周周中就开启…

【神经网络】梯度下降的优化方法【数学公式+代码示例】

文章目录 1、简介2、指数加权平均2.1、公式2.2、代码 3、Momentum⭐3.1、公式演变3.2、代码 4、AdaGrad4.1、计算步骤4.2、代码示例 5、RMSProp5.1、公式5.2、代码5.3、小结 6、Adam6.1、公式和步骤解释⭐6.2、代码⭐6.3、优点 7、何为鞍点8、小结 &#x1f343;作者介绍&#…

Unity3D 转换微信小游戏指引 05 广告内购

Unity3D 转换微信小游戏指引系列&#xff08;第五期 完结&#xff09; 广告 在小程序后台页面找到推广->流量主 开通条件如下&#xff1a; 开通之后&#xff0c;需要接入广告组件。 调用创建广告组件的接口时&#xff0c;需要传入参数 adUnitId&#xff0c;这个是开通流量…

等保测评练习卷20

等级保护初级测评师试题20 姓名&#xff1a; 成绩&#xff1a; 判断题&#xff08;10110分&#xff09; 1. 应根据资产的危害程度对资产进行标识管理&#xff0c;根据资产的价值选择相应的管理措施&#xff08;F&#xff09;不是危…

十七、操作符详解(2)

1.操作符 &#xff08;1&#xff09;按位取反~ C语言中&#xff0c;0的符号位是0。 例&#xff1a;int a 0; ~a -1 按二进制补码取反&#xff0c;符号位也要取反&#xff0c;打印的是原码。 把一个数的二进制位的第n位变成1&#xff1a;a a | (1<<n-1) 应用场合 把…

猫头虎分享:图文创作者发布文章之前需要预览哪些内容?

&#x1f4dd; 猫头虎分享&#xff1a;作为创作者发布文章之前&#xff0c;需要预览哪些内容&#xff1f; 摘要 在发布一篇文章之前&#xff0c;预览是一个至关重要的步骤。确保文章的结构完整性、内容的连贯性以及读者的阅读体验&#xff0c;都是我们需要关注的重点。本文将…