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

相关推荐
怪兽20142 小时前
什么是 Redis?
java·数据库·redis·缓存·面试
wangmengxxw2 小时前
Redis概述
数据库·redis·缓存
笔生花2 小时前
【实战-12】flink版本表
数据库·sql·flink
花月C2 小时前
高效查找数据的数据结构—MySQL 索引
数据结构·数据库·mysql
我笔记3 小时前
关系型数据库RDBMS与非关系型数据库NoSQL区别
数据库·oracle
PiscesCanon3 小时前
达梦开启awr功能报错:[-7160]:Object [DBMS_WORKLOAD_REPOSITORY_DATA_LOW] is invalid
数据库·mysql
SZ1701102313 小时前
新机器 银河麒麟 安装 达梦数据库
数据库
清风6666663 小时前
基于单片机的图书馆智能座位管理平台
数据库·单片机·嵌入式硬件·毕业设计·课程设计
SirLancelot14 小时前
MongoDB-基本介绍(一)基本概念、特点、适用场景、技术选型
java·数据库·分布式·后端·mongodb·软件工程·软件构建
安冬的码畜日常4 小时前
【JUnit实战3_02】第二章:探索 JUnit 的核心功能(一)
数据库·junit·sqlserver