sraメタデータとシーケンスデータの自動ダウンロード

SRAメタデータとシーケンスデータの自動ダウンロード

Windows Power Shell

pip install selenium
pip install chromedriver-binary

環境変数等でパスを通す必要はなく、プログラム中で import chromedriver_binary のようにインポートすればパスが通る。

まずWindowsローカル環境で、Seleniumを用いてMiFishプライマーで増幅された領域のシーケンスデータのSRR番号を取得した。

以下のスクリプトを実行することで、SRR番号のリストを取得できる。

import time
from selenium import webdriver
import chromedriver_binary

driver = webdriver.Chrome()

# DBCLS SRAにGETメソッドでリクエストを送信
driver.get("https://sra.dbcls.jp/result.html?target_db=sra&term=mifish&rows=100&sort=Updated&order=desc")
time.sleep(5)

# cssタグを指定して、プロジェクトを取得
pjts_selector = ".tabulator-cell[tabulator-field='_id']"
projects = driver.find_elements_by_css_selector(pjts_selector)

# NCBI SRAで検索するための文字列を作成
search_str = ""
for pjt in projects:
  search_str = search_str + " or " + pjt.text
search_str = search_str.replace(" or ", "", 1)
print(search_str)

driver = webdriver.Chrome()
driver.get("https://www.ncbi.nlm.nih.gov/sra/?term=" + search_str)

time.sleep(10)

# send toボタンをクリック
driver.execute_script('document.getElementById("sendto").click();')
time.sleep(5)

# Choose Destination → Fileを選択 
driver.execute_script('document.getElementById("dest_File").click();')
time.sleep(5)

# Format → Accession Listを選択
driver.execute_script('document.getElementById("file_format").options[2].setAttribute("selected", "selected")')
time.sleep(5)

# Create Fileをクリック
driver.execute_script('document.querySelector("#submenu_File > button").click();')
time.sleep(5)

time.sleep(5)
driver.quit()

各クリックイベントをトリガーとして実行されるJavascriptの実行とクリックのタイミングに時差があるので、各クリックイベントの後にtime.sleep(5)を実行すると、バグが起こりにくくなる。(なくても上手く行くことはあるが、あると確実)

学生実験で使用したHyper-Vで起動したLinux仮想環境(Ubuntu20.10)でDockerコンテナ仮想環境上でSeleniumサーバーを起動し、メタデータを取得することができるかを確認した。

sources.listの更新 を元にsources.listを編集し、aptコマンドを使用可能にする。

以下のコマンドをターミナル上で実行

$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

ターミナル上で以下のコマンドでインストール

$ COMPOSE_VERSION=$(git ls-remote https://github.com/docker/compose | grep refs/tags | grep -oE "[0-9]+\.[0-9][0-9]+\.[0-9]+$" | sort --version-sort | tail -n 1)
$ curl -L https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` | sudo tee /usr/local/bin/docker-compose > /dev/null
$ sudo chmod +x /usr/local/bin/docker-compose

Remminaはリモートデスクトップクライアントソフトウェアであり、VNCに対応している。VNCによるリモートデスクトップ接続によりDockerコンテナ内で動作するWebブラウザがスクレイピングによって自動で動く動作を確認できるため、デバッグがしやすくなる。

①まずGUI上でUbuntu Softwareを起動する。

②Ubuntu Software上で⁠remminaを検索し、「⁠ソース」が「latest/stable」のRemminaを選択し、インストール。画像では既にインストールされているので、「削除」になっている。

③設定から「Permission」を開き,全ての権限を有効にしておく。

④これだけではmDNS(Avahi)での名前解決ができないため,nscdパッケージをインストールしてsnapdを再起動

$ sudo apt install nscd
$ sudo systemctl restart snapd.service

docker-compose.ymlを配置するディレクトリにサブディレクトリ(本記事の例では「custom⁠」⁠)を作成し,以下の内容でDockerfileを作成。

FROM selenium/standalone-chrome-debug:3

USER root
RUN apt-get update \
 && apt-get install -y -q --no-install-recommends \
    fonts-noto-cjk fonts-noto-cjk-extra language-selector-common language-pack-ja \
 && update-locale LANG=ja_JP.UTF-8 \
 && apt-get clean \
 && rm -r /var/lib/apt/lists/*

ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8

USER 1200

RUN x11vnc -storepasswd password ${HOME}/.vnc/passwd

Seleniumの公式Dockerイメージのままでも自動操作はできるが,デバッグ時に日本語を正しく表示するため,日本語フォントなどを追加したイメージにカスタマイズしてある。

また最後の行の「password」はVNC接続時のパスワード。

docker-compose.yml

version: "3"

services:
  chrome:
    build: custom
    restart: unless-stopped
    ports:
      - 4444:4444
      - 15900:5900
    volumes:
      - /dev/shm:/dev/shm
      - /etc/localtime:/etc/localtime:ro
    environment:
      - SCREEN_WIDTH=1600
      - SCREEN_HEIGHT=900

この段階でディレクトリ構成は以下の通りになっている。

.
├── custom
│   └── Dockerfile
└── docker-compose.yml
  • sraメタデータとシーケンスデータの自動ダウンロード.1648279027.txt.gz
  • 最終更新: 2022/03/26 07:17
  • by 160.237.156.27