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

토요일, 8월 01, 2026

genomeweb 크롤링 두번째 업데이트

genomeweb에서 기사를 크롤링 하는 스크립트를 생각보다 자주 업데이트 하게 되네요 ㅎㅎ 

8월 첫 포스팅을 genomeweb 업데이트 소식을 하게 되네요 :)

지난번에는 크롬 버전을 자동으로 인식해서 드라이버가 알아서 설정되도록 하였는데 이번에는 기사를 크롤링하면서 한국어로 번역되도록 수정해 보았습니다.

제가 하는 작업이 스크립트 구동 후에 수집된 txt 파일 중에 구미가 당기는 기사 제목 파일을 열어서 수작업으로 LLM에 복붙하고 한글 번역과 링크드인에 올릴 한문장 요약을 요청하고 있는데 한글 번역까지 할 수 없을까 해서 이 작업을 해봤습니다. 

물론 2026년인데 당연히 gemini, claude를 구독하고 있다면 가져오면서 번역하고 요약까지 해서 로그인 정보까지 알려주면 agent ai로 할 수 있는데 수작업 복붙이 무슨 노가다냐 라는 의견이 있겠지만 무료 계정만 사용하고 있기 때문에 못합니다. ㅋㅋ

그래도 파이썬은 많은 라이브러리를 제공하고 있는데 googletrans 이라는 라이브러리가 있어서 활용해 봤습니다. :)

저는 있는 줄도 몰랐는데 책을 보다가 이런 라이브러리가 있는 것을 알게되어서 chatGPT에게 한글로 번역된 내용도 txt에 저장하는 스크립트로 수정해줘 하니깐 알아서 googletrans 라이브러리와 async def를 활용해서 코드를 잘 작성해 주더라구요.

그래서 잘 작동해서 현재 사용하고 있습니다. 

코드는 >여기< 입니다.


그럼 다음에도 영양가 있는 내용으로 다시 찾아뵙겠습니다. :)






출처: @ye._.vely618

목요일, 7월 16, 2026

genomeweb 크롤링 첫 업데이트

 하.. 어제까지 잘 사용하고 있었는데 어제 갑자기 에러가 발생해서 잠깐 당황했지만 그래도 짬밥이 있어서 에러를 보고서 일단 대충 해결하고 코드를 수정해보았습니다.

당연히 gemini와 chatGPT의 도움을 받아서..


기존 작성했던 genomeweb crawling 코드에서 크롬 드라이버를 가져오는 함수가 있었습니다.

driver = uc.Chrome(options=options, version_main=148)

근데 이 버전이 계속 148이 아니더라구요... Orz

사실 크롬드라이버를 별도로 고정시켜 놓을 수는 있겠지만 굳이? 개인용 PC에서? 윈도우도 업데이트하고 크롬도 계속 업데이트 될텐데? 

그래서 현재 설치되어 있는 버전을 찾는 함수를 추가하고 함수에서 확인한 버전을 입력해주도록 변겨했습니다. :)

get_chrome_major_version()이라는 함수를 추가해서 아래와 같이 행이 추가되었습니다.

major_version = get_chrome_major_version()

driver = uc.Chrome(options=options, version_main=major_version)


근데 동적으로 크롬버전을 확인 할 수 있도록 해달라니깐 알아서

윈도우, macOS, 리눅스별로 구분해서 코드를 작성하는 센스를 보여주었네요. :)

그리고 get_chrome_major_version함수에서 크롬 버전을 확인하지 못했을 경우 uc.Chrome에서 알아서 하도록 version_main 인자를 생략하는 센스가..

아니 이럴거면 처음부터 uc.Chrome 사용할 떄 version_main 인자를 사용안했으면 됐잖아;;

여하튼 github에 어제자로 genomeweb_crawling 코드가 업데이트 되었습니다.

>여기<


※ 계속 빈둥 빈둥 하면서 의미 있는 코드를 한번 짜보도록 하겠습니다. :)




출처: @ye._.vely618

목요일, 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