**文書の過去の版を表示しています。**
SRAメタデータとシーケンスデータの自動ダウンロード
ローカル環境でメタデータを取得
Seleniumをインストール
Windows Power Shell
pip install selenium
Chrome Driverをインストール
pip install chromedriver-binary
環境変数等でパスを通す必要はなく、プログラム中で import chromedriver_binary
のようにインポートすればパスが通る。
SRA番号取得
まず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)
を実行すると、バグが起こりにくくなる。(なくても上手く行くことはあるが、あると確実)
Linux仮想環境上のDockerコンテナ環境でSeleniumサーバーを起動し、メタデータを取得
学生実験で使用したHyper-Vで起動したLinux仮想環境(Ubuntu20.10)でDockerコンテナ仮想環境上でSeleniumサーバーを起動し、メタデータを取得することができるかを確認した。
sources.listの編集
sources.listの更新 を元にsources.listを編集し、aptコマンドを使用可能にする。
Dockerのインストール
以下のコマンドをターミナル上で実行
$ 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
docker-composeのインストール
ターミナル上で以下のコマンドでインストール
$ 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のインストール
Remminaはリモートデスクトップクライアントソフトウェアであり、VNCに対応している。VNCによるリモートデスクトップ接続によりDockerコンテナ内で動作するWebブラウザがスクレイピングによって自動で動く動作を確認できるため、デバッグがしやすくなる。
②Ubuntu Software上でremminaを検索し、「ソース」が「latest/stable」のRemminaを選択し、インストール。画像では既にインストールされているので、「削除」になっている。
③設定から「Permission」を開き,全ての権限を有効にしておく。
④これだけではmDNS(Avahi)での名前解決ができないため,nscdパッケージをインストールしてsnapdを再起動
$ sudo apt install nscd $ sudo systemctl restart snapd.service
Seleniumコンテナ環境を構築するためのイメージファイルをBuildする際に使用する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接続時のパスワード。
イメージのダウンロード、ビルドを実行した後に、Chromeを自動操作できるコンテナ環境をするためのdocker-compose.ymlの作成
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