玩转ChatGPT:批量下载Alphafold的蛋白pdb文件

一、写在前面

突发奇想,想批量下载Alphafold网站的蛋白pdb文件,后续再做个分子对接用。又不想手动下载,来求助CSDN和GPT。

二、CSDN白嫖基础代码

CSDN大神多,这不,找到一个:
Alphafold批量下载蛋白的pdb文件_pdb文件下载-CSDN博客

不过使用的是谷歌浏览器,我自己用的是Edge浏览器,因此需要魔改。

三、GPT魔改代码

话不多说,直接上步骤。

(1)安装Selenium包

selenium是自动化测试工具,可以理解为Python使用它来操作网页。

安装代码:

pip install selenium 

或者

conda install selenium

(2)安装Selenium驱动

Selenium需要一个驱动程序来与所选的浏览器交互,不同浏览器驱动不同。

我的是Edge浏览器,下载地址:

Microsoft Edge WebDriver - Microsoft Edge Developer

当然,是有版本区别的,因此,先看看我们的版本号:

下载相应版本的驱动:

解压,但是要记住放的路劲地址,比如我的是:O:/msedgedriver.exe

(3)GPT魔改后的代码

咒语要点主要是告诉GPT我们使用的是Edge浏览器、驱动放置的地点等,经过几轮Debug,代码如下:

import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.service import Service
from selenium.webdriver import EdgeOptions
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# Constants
EDGE_DRIVER_PATH = r'O:/msedgedriver.exe'
WORK_PATH = r"O:/"
PROTEIN_FILE = "test1.txt"
XPATH_DOWNLOAD_LINK = "//*[@id=\"main-content-area\"]/app-entry/div[1]/div/app-summary-text/div/div[1]/div[2]/a[1]"
PAGE_LOAD_TIMEOUT = 2500
EXPLICIT_WAIT_TIMEOUT = 30  # 设置显式等待的超时时间

# Edge Options
edge_options = EdgeOptions()
# edge_options.add_argument('--headless')
edge_options.add_argument('--disable-gpu')
service = Service(executable_path=EDGE_DRIVER_PATH)

# Change working directory
os.chdir(WORK_PATH)

# Read proteins from file
with open(PROTEIN_FILE, "r") as f:
    proteins = [line.strip() for line in f.readlines()]

failed_downloads = []

# Initialize browser instance
with webdriver.Edge(service=service, options=edge_options) as driver:
    driver.set_page_load_timeout(PAGE_LOAD_TIMEOUT)
    wait = WebDriverWait(driver, EXPLICIT_WAIT_TIMEOUT)

    for protein_id in proteins:
        print(f"{protein_id} is downloading!")
        driver.get(f"https://alphafold.ebi.ac.uk/entry/{protein_id}")
        
        try:
            download_link = wait.until(EC.element_to_be_clickable((By.XPATH, XPATH_DOWNLOAD_LINK)))
            download_link.click()
            time.sleep(4)  # Wait for the file to download
            print(f"{protein_id} succeed!")
        except Exception as e:
            print(f"{protein_id} download failed!")
            failed_downloads.append(protein_id)

# Write failed downloads to file
with open("failed.txt", "w") as df:
df.write("\n".join(failed_downloads))

(4)运行

首先,把需要下载的蛋白的Uniport的ID整理到一个txt文件,蛋白后面不要有空格,一个蛋白一行!!!我的保存路劲为:O:/。

准备就绪,运行代码:

批量下载Alphafold的蛋白pdb文件

可以看到,自动打开网页,点击下载,简单粗暴有内涵~

### 批量下载 AlphaFold3 预测的蛋白质结构 PDB 文件 为了实现批量下载 AlphaFold3 预测的蛋白质结构 PDB 文件,可以采用自动化脚本的方式。考虑到目标是从 Alphafold 数据库中获取大量文件并避免手动操作,下面介绍一种基于 Python 和命令行工具的方法。 #### 使用 Linux 命令行工具 `wget` 结合循环语句 对于已知 ID 列表的情况,可以直接利用 Linux 中强大的网络下载工具 `wget` 来完成这项工作。假设有一个包含所需蛋白质 ID 的文本文件(每行一个 ID),可以通过如下 shell 脚本来执行批量下载: ```bash #!/bin/bash while read p; do wget https://alphafold.ebi.ac.uk/files/AF-${p}-F1-model_v3.pdb -O ${p}.pdb done < protein_ids.txt ``` 这段 Shell 脚本读取名为 `protein_ids.txt` 的文件中的每一行作为变量 `$p`,构建完整的 URL 并调用 `wget` 进行下载[^3]。 #### 通过编程语言如Python 实现更灵活控制 当面对更加复杂的需求时,比如动态获取最新版本链接或是处理错误重试等情况,则推荐使用 Python 编写专门程序来进行管理。这里给出一段简单的例子说明如何借助 requests 库来抓取网页内容以及保存远程文件至本地磁盘: ```python import os import requests def download_pdb(protein_id, output_dir='.'): url = f"https://alphafold.ebi.ac.uk/files/AF-{protein_id}-F1-model_v3.pdb" response = requests.get(url) if not os.path.exists(output_dir): os.makedirs(output_dir) file_path = os.path.join(output_dir, f"{protein_id}.pdb") with open(file_path, 'wb') as pdb_file: pdb_file.write(response.content) with open('protein_ids.txt', 'r') as id_list: for line in id_list: prot_id = line.strip() try: download_pdb(prot_id, './pdbs') print(f'Successfully downloaded {prot_id}') except Exception as e: print(f'Failed to download {prot_id}: ', str(e)) ``` 此段代码实现了从给定的蛋白质 ID 文档中逐条读入 ID,并尝试将其对应的 PDB 文件存储于指定目录下。它还包含了基本异常捕获机制以应对可能出现的问题[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jet4505

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值