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

相关推荐
XLYcmy7 分钟前
AI 赋能后中文与英文数据库对比分析报告 上
数据库·ai·llm·prompt·检索·wos·cnki
这个DBA有点耶43 分钟前
ELT 工具选型完整指南:从 ETL 差异分析到工程落地
数据库·架构·代码规范
IvorySQL1 小时前
PostgreSQL 日报|堆表选择性索引更新(10 月 13 日)
数据库·人工智能·postgresql·开源·区块链
张洛闻Eren1 小时前
Ansible【第一课】:Ansible介绍
运维·数据库·云原生·kubernetes·github·ansible
深圳市益普科技有限公司2 小时前
中小封装厂上 MES,为什么十个项目九个坑?
大数据·数据库·人工智能
云边云科技_云网融合2 小时前
从 POS 机到访客 Wi-Fi:零售门店安全建设的完整解法
服务器·网络·数据库
天行健,君子而铎2 小时前
知形-数据库风险监测系统:非侵入式、可溯源、差异化的数据库安全方案
网络·数据库·安全
这个DBA有点耶2 小时前
分布式事务深度:TCC空回滚、悬挂与Saga补偿风暴的根因与解法
数据库·mysql·代码规范
执笔为剑2 小时前
2.1.2-2、V8R3迁移到V8R6-迁移介绍
数据库
hiahiahia1232 小时前
Message 和对话
服务器·前端·数据库