差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
sraメタデータとシーケンスデータの自動ダウンロード [2022/03/26 08:30] – 160.237.156.27 | sraメタデータとシーケンスデータの自動ダウンロード [Unknown date] (現在) – 削除 - 外部編集 (Unknown date) 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ====== SRAメタデータとシーケンスデータの自動ダウンロード ====== | ||
- | |||
- | ===== ローカル環境でメタデータを取得 ===== | ||
- | |||
- | ==== Seleniumをインストール ==== | ||
- | |||
- | Windows Power Shell | ||
- | |||
- | ``` | ||
- | pip install selenium | ||
- | ``` | ||
- | |||
- | ==== Chrome Driverをインストール ==== | ||
- | |||
- | ``` | ||
- | pip install 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(" | ||
- | time.sleep(5) | ||
- | |||
- | # cssタグを指定して、プロジェクトを取得 | ||
- | pjts_selector = " | ||
- | 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(" | ||
- | print(search_str) | ||
- | |||
- | driver = webdriver.Chrome() | ||
- | driver.get(" | ||
- | |||
- | time.sleep(10) | ||
- | |||
- | # send toボタンをクリック | ||
- | driver.execute_script(' | ||
- | time.sleep(5) | ||
- | |||
- | # Choose Destination → Fileを選択 | ||
- | driver.execute_script(' | ||
- | time.sleep(5) | ||
- | |||
- | # Format → Accession Listを選択 | ||
- | driver.execute_script(' | ||
- | time.sleep(5) | ||
- | |||
- | # Create Fileをクリック | ||
- | driver.execute_script(' | ||
- | time.sleep(5) | ||
- | |||
- | time.sleep(5) | ||
- | driver.quit() | ||
- | ``` | ||
- | |||
- | 各クリックイベントをトリガーとして実行されるJavascriptの実行とクリックのタイミングに時差があるので、各クリックイベントの後に'' | ||
- | |||
- | ===== Linux仮想環境上のDockerコンテナ環境でSeleniumサーバーを起動し、メタデータを取得 ===== | ||
- | |||
- | 学生実験で使用したHyper-Vで起動したLinux仮想環境(Ubuntu20.10)でDockerコンテナ仮想環境上でSeleniumサーバーを起動し、メタデータを取得することができるかを確認した。 | ||
- | |||
- | ==== sources.listの編集 ==== | ||
- | |||
- | [[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:// | ||
- | $ echo \ | ||
- | "deb [arch=amd64 signed-by=/ | ||
- | $(lsb_release -cs) stable" | ||
- | $ sudo apt-get update | ||
- | $ sudo apt-get install docker-ce docker-ce-cli containerd.io | ||
- | ``` | ||
- | ==== docker-composeのインストール ==== | ||
- | ターミナル上で以下のコマンドでインストール | ||
- | |||
- | ``` | ||
- | $ COMPOSE_VERSION=$(git ls-remote https:// | ||
- | $ curl -L https:// | ||
- | $ sudo chmod +x / | ||
- | ``` | ||
- | |||
- | ==== Remminaのインストール ==== | ||
- | |||
- | Remminaはリモートデスクトップクライアントソフトウェアであり、VNCに対応している。VNCによるリモートデスクトップ接続によりDockerコンテナ内で動作するWebブラウザがスクレイピングによって自動で動く動作を確認できるため、デバッグがしやすくなる。 | ||
- | |||
- | ①まずGUI上でUbuntu Softwareを起動する。 | ||
- | {{: | ||
- | |||
- | ②Ubuntu Software上でremminaを検索し、「ソース」が「latest/ | ||
- | {{: | ||
- | |||
- | ③設定から「Permission」を開き,全ての権限を有効にしておく。 | ||
- | |||
- | ④これだけではmDNS(Avahi)での名前解決ができないため,nscdパッケージをインストールしてsnapdを再起動 | ||
- | |||
- | ``` | ||
- | $ sudo apt install nscd | ||
- | $ sudo systemctl restart snapd.service | ||
- | ``` | ||
- | |||
- | 参考にしたサイト | ||
- | |||
- | [[https:// | ||
- | |||
- | ==== Seleniumコンテナ環境を構築するためのイメージファイルをBuildする際に使用するDockerfileの作成 ==== | ||
- | |||
- | docker-compose.ymlを配置するディレクトリにサブディレクトリ(本記事の例では「custom」)を作成し,以下の内容でDockerfileを作成。 | ||
- | |||
- | ``` | ||
- | FROM selenium/ | ||
- | |||
- | USER root | ||
- | RUN apt-get update \ | ||
- | && | ||
- | fonts-noto-cjk fonts-noto-cjk-extra language-selector-common language-pack-ja \ | ||
- | && | ||
- | && | ||
- | && | ||
- | |||
- | 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}/ | ||
- | ``` | ||
- | |||
- | Seleniumの公式Dockerイメージのままでも自動操作はできるが,デバッグ時に日本語を正しく表示するため,日本語フォントなどを追加したイメージにカスタマイズしてある。 | ||
- | |||
- | また最後の行の「password」はVNC接続時のパスワード。 | ||
- | |||
- | ==== イメージのダウンロード、ビルドを実行した後に、Chromeを自動操作できるコンテナ環境をするためのdocker-compose.ymlの作成 ==== | ||
- | |||
- | docker-compose.yml | ||
- | ``` | ||
- | version: " | ||
- | |||
- | services: | ||
- | chrome: | ||
- | build: custom | ||
- | restart: unless-stopped | ||
- | ports: | ||
- | - 4444:4444 | ||
- | - 15900:5900 | ||
- | volumes: | ||
- | - / | ||
- | - / | ||
- | environment: | ||
- | - SCREEN_WIDTH=1600 | ||
- | - SCREEN_HEIGHT=900 | ||
- | ``` | ||
- | |||
- | この段階でディレクトリ構成は以下の通りになっている。 | ||
- | |||
- | ``` | ||
- | . | ||
- | ├── custom | ||
- | │ └── Dockerfile | ||
- | └── docker-compose.yml | ||
- | ``` | ||
- | |||
- | 最後にこのディレクトリで以下のコマンドを実行し、コンテナを起動。 | ||
- | |||
- | ``` | ||
- | $ docker-compose up -d | ||
- | ``` | ||
- | |||
- | ==== RemminaでSeleniumサーバーにVNCでリモートデスクトップ接続 ==== | ||
- | |||
- | ①Remminaを起動する。 | ||
- | |||
- | ②Remminaでリモートデスクトップ接続 | ||
- | |||
- | プロトコルは「VNC」、接続先ホストは「localhost: | ||
- | {{: | ||
- | |||
- | ③VNCパスワードを入力。 | ||
- | |||
- | 上記Dockerfileと同様に作成した場合は、パスワードは「password」。 | ||
- | {{: | ||
- | |||
- | ④「OK」をクリックし、接続完了。 | ||
- | |||
- | ==== PythonおよびSeleniumのインストール ==== | ||
- | |||
- | ``` | ||
- | $ sudo apt install python3-pip | ||
- | $ pip3 install selenium | ||
- | ``` | ||
- | |||
- | ==== SRA番号取得スクリプトを実行 ==== | ||
- | |||
- | 以下のスクリプトを実行。(ローカル環境とドライバーの指定の仕方などが異なるので注意) | ||
- | ``` | ||
- | import time | ||
- | from selenium import webdriver | ||
- | |||
- | # Chromeのオプション | ||
- | options = webdriver.ChromeOptions() | ||
- | # options.add_argument(" | ||
- | |||
- | # Selenium Serverに接続 | ||
- | driver = webdriver.Remote(command_executor=' | ||
- | |||
- | # driver = webdriver.Chrome() | ||
- | |||
- | # DBCLS SRAにGETメソッドでリクエストを送信 | ||
- | driver.get(" | ||
- | time.sleep(5) | ||
- | |||
- | # cssタグを指定して、プロジェクトを取得 | ||
- | pjts_selector = " | ||
- | 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(" | ||
- | print(search_str) | ||
- | |||
- | driver = webdriver.Remote(command_executor=' | ||
- | driver.get(" | ||
- | |||
- | time.sleep(10) | ||
- | |||
- | # send toボタンをクリック | ||
- | driver.execute_script(' | ||
- | time.sleep(5) | ||
- | |||
- | # Choose Destination → Fileを選択 | ||
- | driver.execute_script(' | ||
- | time.sleep(5) | ||
- | |||
- | # Format → Accession Listを選択 | ||
- | driver.execute_script(' | ||
- | time.sleep(5) | ||
- | |||
- | # Create Fileをクリック | ||
- | driver.execute_script(' | ||
- | time.sleep(15) | ||
- | |||
- | driver.quit() | ||
- | ``` | ||
- | |||
- | 上記のスクリプトを実行することでRemminaで接続したSeleniumサーバー上でChromeが起動し、SRA番号取得のブラウザ操作が実行される。 | ||
- | |||
- | ==== コンテナ環境のDownloadディレクトリをマウント ==== | ||
- | |||
- | 上記スクリプトを実行すると、コンテナ環境の''/ | ||
- | |||
- | ``` | ||
- | sudo docker exec custom_chrome_1 find / -name " | ||
- | ``` | ||
- | |||
- | ダウンロードファイルを実環境上にも反映するためには、/ | ||
- | |||
- | ①マウント先のディレクトリを作成し、書き込み権限を付与する。(otherに書き込み権限が必要) | ||
- | ``` | ||
- | mkdir download (/ | ||
- | chmod o+w download | ||
- | ``` | ||
- | |||
- | ②docker-compose.ymlを編集 | ||
- | |||
- | bindマウントの設定を追加 | ||
- | ``` | ||
- | version: " | ||
- | |||
- | services: | ||
- | chrome: | ||
- | build: custom | ||
- | restart: unless-stopped | ||
- | ports: | ||
- | - 4444:4444 | ||
- | - 15900:5900 | ||
- | volumes: | ||
- | - / | ||
- | - / | ||
- | - / | ||
- | environment: | ||
- | - SCREEN_WIDTH=1600 | ||
- | - SCREEN_HEIGHT=900 | ||
- | ``` | ||
- | |||
- | ③実行中のコンテナを停止し、再度buildからコンテナの起動までを行う。 | ||
- | ``` | ||
- | sudo docker ps -a (実行中のコンテナのIDを確認) | ||
- | sudo docker stop ca0204eaa032(上記で確認したコンテナのIDを確認) | ||
- | sudo docker rm ca0204eaa032 | ||
- | docker-compose up -d | ||
- | ``` | ||
- | |||
- | この後再度スクリプトを実行すると、ダウンロードファイルを実環境上でも確認することができる。 | ||
- | |||
- | |||
- | |||
- | |||