레이블이 Scrapper인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Scrapper인 게시물을 표시합니다. 모든 게시물 표시

목요일, 5월 28, 2026

GISAID 크롤링 테스트

지난번 잠깐 검색해봤던 gisaid 사이트에서 covid19의 DNA서열을 다운로드하는 github의 코드들이 진짜 잘 작동하고 있는지를 확인해서 기존에 잘 작동하고 있는 스크립트가 있는데 굳이 다시 covid서열 다운로드 받는 스크립트 만든다고 돈(aka 토큰)을 낭비하는 것은 아닌지 한번 확인해 보았습니다.

아.. 근데 왜 gisaid에서 covid 19 서열을 2026년도에도 다운로드 받고 있어야돼? 라고 의아해하는 분들을 위해서 이유를 간단히 말씀드리자면..

1. 그냥 매일, 매달 아직도 새롭게 COVID19 서열이 올라오는거 수집해보고 싶은 분들이 있을 수 있지 않겠습니까?

2. COVID19 진단키트 업체들은 1년에 한번인가 두번씩 현재 생산, 판매하고 있는 진단키트가 현재 유행하고 있는 변종도 잘 탐지가 되는지 증거자료를 제출해야하는데 이때 실 검체를 사용하지 못할 수 도 있습니다. 적어도 in-silico로 검증을 해야하는데 이럴 때 gisaid 홈페이지에서 서열을 다운로드 해서 분석을 해야합니다. 이럴 때 미리미리 잘 정리된 분석할 서열들이 내 손에 있으면 편하겠죠? 그래서 하는겁니다.


그래서 다시 본론을 돌아와서

github에 공개되어 있는 스크립트들을 다음과 같이 4개를 확인해 보았습니다.

https://github.com/poeli/EpiCoV_downloader

https://github.com/enviro-lab/gisaid-download

https://github.com/dubc461/GID

https://github.com/bioinf-mcb/gisaid-scrapper


그리고 결론을 먼저 말씀드리자면 (이미 다들 알고 있다 싶이)"새로 만들어야합니다." 되겠습니다. ㅋ 

일단 COVID19가 휩쓸던 때에 만든거라서 파이썬 버전들도 예전버전이고, gisaid 홈페이지가 이전보다 많이 교묘해졌습니다. 그래서 기존의 코드들은 작동을 잘 안하더라구요(물론 그때 당시에는 잘 작동했을 지 모르겠지만... 조금 지나서 작동 안했을 것 같습니다.)

물론 gisaid말고 NCBI에서도 COVID19 DNA서열은 다운로드 받을 수 있습니다. 약 920만개 서열로 gisaid에 적재되어 있는 17백만개 보다는 적은데 다운로드가 조금 수월합니다. 다만 최신 변종 서열들은 NCBI에는 빠르게 업데이트가 되지 않아서 위에 언급한 두번째 이유를 위해서는 gisaid를 활용해야합니다.

그럼 기존 공개되어 있는 다운로드 스크립트에 수행 결과에 대해서 얘기해보죠 :)


1. EpiCoV_downloader

github: https://github.com/poeli/EpiCoV_downloader

설치

$ git clone https://github.com/poeli/EpiCoV_downloader.git

$ cd EpiCoV_downloader/

$ conda env create -f environment.yml

$ conda activate gisaid

(gisaid) gwlee@gwlee:~/EpiCoV_downloader$


명령어
./gisaid_EpiCoV_downloader.py -u <user_id> -p <user_pw> -cs 2019-12-26 -ce 2019-12-30 -hc -le -cg

에러
1) 173줄에서 오류 발생
# 기존 코드
driver = webdriver.Firefox(
    firefox_profile=profile, options=options, firefox_binary=ffbin
)
------------------------------------------------------------------------------------------
# 수정된 코드 (Selenium 4+ 문법)
options.profile = profile  # 프로필을 options에 설정
if ffbin:
    options.binary_location = ffbin  # 바이너리 경로를 options에 설정

# webdriver.Firefox에는 오직 options만 전달합니다.
driver = webdriver.Firefox(options=options)

2) conda에 설치된 geckodriver이 오래전 버전으로 업데이트 필요
$ conda update -c conda-forge geckodriver

3) firefox headless 
# 기존 코드 어딘가에 정의되어 있을 options 객체에 아래 라인을 추가합니다.
options.add_argument('--headless')  # 화면 없이 실행하는 옵션
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
# 그 후 기존 코드대로 실행
driver = webdriver.Firefox(options=options)

4) 파이어폭스 오류
#파이어폭스 관련된 라이브러리 설치 필요
sudo apt-get update
sudo apt-get install -y firefox

5) 그래픽 라이브러리 설치 
# 헤드리스 모드라 하더라도 가상의 그래픽 라이브러리가 필요합니다.
sudo apt-get install -y libgtk-3-0
# 1. Xvfb 및 관련 라이브러리 설치 (우분투 기준)
sudo apt-get update
sudo apt-get install -y xvfb xauth xfonts-base
# 2. 가상 디스플레이 백그라운드 실행 (디스플레이 번호 :99)
Xvfb :99 -ac -screen 0 1280x1024x24 &
# 3. 환경 변수에 디스플레이 등록
export DISPLAY=:99
# 4. 이제 파이썬 스크립트 다시 실행
python gisaid_EpiCoV_downloader.py -u <user_id> -p <user_pw> -cs 2019-12-26 -ce 2019-12-30 -hc -le -cg

6) timeout으로 프록시를 사용하지 않도록 코드 수정
# 기존 options 설정 부근에 추가
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
# 로컬 통신은 프록시를 거치지 않도록 설정
options.set_preference("network.proxy.type", 0)  # 0은 프록시 없음(Direct)을 의미
options.add_argument('--disable-gpu')            # 리눅스 서버에서 불필요한 GPU 가속 끄기
driver = webdriver.Firefox(options=options)

7) 라이브러리 호환 문제로 python 3.8에서 3.12로 업그레드필요
# 1. environment.yml을 기반으로 gisaid_stable 이름의 환경 생성
conda env create -f environment.yml -n gisaid_stable
# 2. 생성된 환경 활성화
conda activate gisaid_stable
# 3. 이 환경의 파이썬 버전을 3.12로 다운그레이드 및 필수 드라이버 설치
$ conda install python=3.12 -y
$ conda install -c conda-forge geckodriver -y
$ conda install -c conda-forge geckodriver selenium urllib3 requests pandas -y
$ ./gisaid_EpiCoV_downloader.py  -u <user_id> -p <user_pw> -cs 2019-12-26 -ce 2019-12-30 -hc -le -cg

결과: Error Orz



2. gisaid-download

github: https://github.com/enviro-lab/gisaid-download

설치

$ conda create -n gisaid python=3.10

$ conda activate gisaid

$ pip install gisaid-download

$ python -m pip install "setuptools<81"

명령어

$ gisaid_download --example -o gisaid/directory


결과: 작동도 안하고 미국주에서 발생한 서열만 수집?? 코드안에 미국 주만 리스트업 되어 있음



3. GID

github: https://github.com/dubc461/GID

설치

$ git clone https://github.com/dubc461/GID.git

$ cd GID

$ conda env create -f environment.yml

$ conda activate gid


결과: selenium 버전 문제가 있는 듯 작동안함



4. gisaid-scrapper

github: https://github.com/bioinf-mcb/gisaid-scrapper.git

설치

$ git clone https://github.com/bioinf-mcb/gisaid-scrapper.git

$ conda create -n scrapper python=3

$ conda activate scrapper

$ pip install -r requirements.txt

명령어

python3 scrap.py -u <user_id> -p <user_pw> -w

에러

1) urllib3 버전 오류

$ pip uninstall urllib3

$ pip install "urllib3<2"


2) credentials.txt 파일 생성

credentials.txt 파일 내에 userid와 passwd 정보를 넣어서 생성

python3 scrap.py -w -q -d whole_genome -f credentials.txt

 

결과: 한시간정도 작동하다가 timeout으로 실행 중단


GISAIDR과 같은 경우는 R기반의 스크립트라서 파이썬 기반의 스크립트만 테스트하느라고 일단 배제하였습니다. 결과적으로는 기존의 스크립트들은 파이썬 버전이 낮아 에러가 발생하는 경우가 많았고, 버전 문제가 없는 경우 gisaid 사이트가 무작위적인 크롤링이나 스크랩핑을 막고자 사이트를 변경한 내용이 반영되지 못해서 제대로 작동되지 않는 문제가 있는 것 같았습니다.

고로 현재 gisaid 사이트에 맞는 크롤링 스크립트가 필요할것 같습니다. :)

※ 그럼 다음 글은 개선된 스크립트를 직접 개발해보겠다 정도이지 않을까하네요. :)



출처: @ye._.vely618