GitHub Actions + Selenium으로 스크래핑 정기 실행
5594 단어 GitHubGitHubActions셀레늄도커루비
샘플 리포지토리 - 닛덴 고객 페이지에서 전력 사용량을 스크래핑하고 있습니다.
여기에서는 자세히 다루지 않지만,
놀아 보았습니다.
GitHub Actions
구체적으로는 다음과 같은 YAML 파일을 준비합니다.
.github/workflows/actions.ymlon:
schedule:
- cron: 0 0 * * *
jobs:
scraping:
runs-on: ubuntu-latest
services:
selenium:
image: selenium/standalone-chrome:3.141.59-vanadium
ports:
- 4444:4444
volumes:
- /dev/shm:/dev/shm
steps:
- uses: actions/checkout@v1
- name: execute
run: ...
설명
- on:
schedule:
- cron: 0 0 * * *
on
에서 워크플로를 시작할 이벤트를 지정합니다. 정기 실행시키고 싶기 때문에, schedule
로서 cron 형식으로 기동 시각을 지정합니다. 타임 존은 UTC 같기 때문에 주의가 필요합니다.
runs-on: ubuntu-latest
runs-on
에서 작업을 실행할 가상 머신 유형을 지정합니다. Docker 컨테이너를 사용하는 경우 Linux여야 하는 것 같습니다.
services:
selenium:
image: selenium/standalone-chrome:3.141.59-vanadium
ports:
- 4444:4444
volumes:
- /dev/shm:/dev/shm
services
에서 서비스를 호스팅하는 컨테이너를 정의할 수 있습니다. 여기서는 Selenium을 실행하기 위해 selenium/standalone-chrome
를 서비스로 정의합니다.
포트와 볼륨 설정은 selenium/standalone-chrome
의 기본 시작 방법 을 그대로 사용하고 있습니다.
steps:
- uses: actions/checkout@v1
- name: execute
run: ...
steps
에 실제로 실행하고 싶은 스크립트들을 정의해 갑니다. uses: actions/checkout@v1
는 공용 동작으로 소스 코드를 워크플로에 복사합니다.
run: ...
로 스크래핑할 프로그램을 시작합니다. 구체적으로는 run: ruby main.rb
등.
이 파일을 준비해 두는 것만으로 나머지는 마음대로 정기 실행해 줍니다만, 테스트로 실행하는 방법이 보이지 않았습니다. . 어쩔 수 없이 cron에서 최근 시간을 지정하여 동작 확인했습니다.
Badges
README에 붙이는 배지도 있습니다.
[![Actions Status](https://github.com/{owner}/{repo}/workflows/{workflow_name}/badge.svg)](https://github.com/{owner}/{repo}/actions)
workflow_name
는 파일 이름이 아니라 워크플로에 지정한 이름입니다. (위의 설명에서는 생략하고 있습니다만, 샘플 리포지토리에 있는 파일로 하면(자) 1 행째의 name: scraping electric power consumption
입니다. 스페이스는 %20
(으)로 할 필요가 있습니다.)
스크래핑하는 프로그램
서비스로서 시작한 selenium/standalone-chrome
위에서 Selenium 를 움직이므로, driver 의 생성 방법이 로컬로 움직이는 경우와 다릅니다.
구체적으로는 ( Ruby 의 경우)
driver = Selenium::WebDriver.for :remote, desired_capabilities: :chrome
결론
스스로 손을 움직여 만져 보는 것으로, 「빽빽하게 부풀려 완전히 이해한」상태가 되었습니다.
평소에는 GitLab CI를 만지고 있으므로, 명시적으로 checkout 하지 않으면 안되는 곳이라든지 조금 귀찮게 느껴 버렸습니다.
GitHub Actions의 향후 기대.
참고
on:
schedule:
- cron: 0 0 * * *
jobs:
scraping:
runs-on: ubuntu-latest
services:
selenium:
image: selenium/standalone-chrome:3.141.59-vanadium
ports:
- 4444:4444
volumes:
- /dev/shm:/dev/shm
steps:
- uses: actions/checkout@v1
- name: execute
run: ...
- on:
schedule:
- cron: 0 0 * * *
runs-on: ubuntu-latest
services:
selenium:
image: selenium/standalone-chrome:3.141.59-vanadium
ports:
- 4444:4444
volumes:
- /dev/shm:/dev/shm
steps:
- uses: actions/checkout@v1
- name: execute
run: ...
[![Actions Status](https://github.com/{owner}/{repo}/workflows/{workflow_name}/badge.svg)](https://github.com/{owner}/{repo}/actions)
서비스로서 시작한
selenium/standalone-chrome
위에서 Selenium 를 움직이므로, driver 의 생성 방법이 로컬로 움직이는 경우와 다릅니다.구체적으로는 ( Ruby 의 경우)
driver = Selenium::WebDriver.for :remote, desired_capabilities: :chrome
결론
스스로 손을 움직여 만져 보는 것으로, 「빽빽하게 부풀려 완전히 이해한」상태가 되었습니다.
평소에는 GitLab CI를 만지고 있으므로, 명시적으로 checkout 하지 않으면 안되는 곳이라든지 조금 귀찮게 느껴 버렸습니다.
GitHub Actions의 향후 기대.
참고
Reference
이 문제에 관하여(GitHub Actions + Selenium으로 스크래핑 정기 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/otuhs_d/items/0953e237119178fd796e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)