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

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

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

AlphaFold Protein Structure Database

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

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

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

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

python 复制代码
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

python 复制代码
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代码,来继续把未完成下载的蛋白质下载完成:

python 复制代码
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。这样甚至连路径解析都不需要用到,直接通过访问资源网页就解决了。

相关推荐
Nturmoils3 小时前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波7 小时前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
倔强的石头_1 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_4 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab5 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence5 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神5 天前
三、用户与权限管理
数据库·mysql
麦聪聊数据6 天前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_6 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡6 天前
【MySQL数据库】数据类型与表约束
数据库·mysql