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

相关推荐
档案宝档案管理4 小时前
档案宝|开箱即用,打破档案管理“复杂魔咒”
数据库·人工智能·档案·档案管理
小朋友,你是否有很多问号?4 小时前
java udf 实现经纬度匹配pg数据库public.geometry地理位置
数据库
@insist1234 小时前
软件设计师-数据库核心:事务 ACID 特性、并发控制与备份恢复技术全解
数据库·oracle·软考·软件设计师·软件水平考试
正在走向自律4 小时前
Oracle替换工程实践深度解析——从技术落地到成本优化的全维度攻坚
数据库·oracle·kingbasees·数据库替换
杨云龙UP4 小时前
Oracle DG / ADG日常巡检操作指南
linux·运维·服务器·数据库·ubuntu·oracle
执笔画流年呀4 小时前
简单使用MySQL
数据库·mysql·oracle
qq_334903154 小时前
Python单元测试(unittest)实战指南
jvm·数据库·python
marsh02064 小时前
13 openclaw数据验证与过滤:确保应用安全性的第一道防线
网络·数据库·ai·编程·技术
JavaGuide4 小时前
美团面试:为什么要用分布式缓存?本地缓存呢?多级缓存一致性如何保证?
数据库·redis·后端·缓存·大厂面试
一个有温度的技术博主4 小时前
Redis系列四:redis的启动配置
数据库·redis·缓存