초보자가 파이썬으로 웹 스크래핑 (4) - 2 CloudShell에서 스크래핑 실행

그러면 지난번 생성한 Cloud Source Repositroies 리포지토리에 스크래핑 PGM을 추가합니다.

파이썬에서 웹 스크래핑 학습 로드맵



(1) 로컬에서 우선 목적의 부츠의 스크래핑에 성공한다.
(2) 로컬에서 스크래핑한 결과를 Google 스프레드시트에 연계한다.
(3) 로컬에서 cron 자동 실행을 수행합니다.
(4) 클라우드 서버에서 무료 자동 실행에 도전한다. (Google Compute Engine)
 (4)-1 클라우드에 테스트용 PGM을 올려 CloudShell상에서 정상 가동시킨다
 (4)-2 스크래핑 PGM을 리포지토리에 추가해, CloudShell상에서 정상 가동시킨다. ←지금 코코
  (4)-3 ComputeEngine의 VM 인스턴스를 작성해, 스크래핑을 자동 실행시킨다.
(5)클라우드상에서, 서버리스에서의 무료 자동 실행에 도전한다. (아마 Cloud Functions + Cloud Scheduler)

이번 절차



[1] 로컬 리포지토리에 스크래핑 PGM 추가
[2]Cloud Source Repositories 마스터에게 push
[3] 마스터에서 CloudShell의 복제본으로 pull
[4] requirements.txt를 사용하여 필요한 모듈의 대량 설치
[5] CloudShell에서 스크래핑 수행

[1] 로컬 리포지토리에 스크래핑 PGM 추가



로컬 리포지토리에 파일을 추가합니다.

Mac의 zsh
11:28:14 [~] % cd gce-cron-test
11:28:25 [~/gce-cron-test] % ls -la
total 40
drwxr-xr-x   7 hoge  staff   224  9 26 11:27 .
drwxr-xr-x+ 45 hoge  staff  1440  9 23 16:45 ..
-rw-r--r--@  1 hoge  staff  6148  9 26 11:26 .DS_Store
drwxr-xr-x  13 hoge  staff   416  9 23 16:49 .git
-rw-r--r--   1 hoge  staff   146  9 21 15:29 cron-test.py
-rw-r--r--@  1 hoge  staff  2352  9 16 17:54 my-web-hoge-app-hogehoge.json
-rw-r--r--   1 hoge  staff  2763  9 17 13:22 requests-test2.py

커밋이 필요한 파일이 있는지 확인하고 add, commit을 수행합니다.

Mac의 zsh
11:28:28 [~/gce-cron-test] % git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .DS_Store
        my-web-hoge-app-hogehoge.json
        requests-test2.py

nothing added to commit but untracked files present (use "git add" to track)
11:28:34 [~/gce-cron-test] % 
11:28:52 [~/gce-cron-test] % 
11:28:53 [~/gce-cron-test] % git add .
11:28:58 [~/gce-cron-test] % 
11:29:38 [~/gce-cron-test] % 
11:29:38 [~/gce-cron-test] % git commit -m "Add requests-test to Cloud Source Repositories" 
[master 44abc4d] Add requests-test to Cloud Source Repositories
 3 files changed, 73 insertions(+)
 create mode 100644 .DS_Store
 create mode 100644 my-web-hoge-app-hogehoge.json
 create mode 100644 requests-test2.py

[2]Cloud Source Repositries의 마스터에게 push



master에 pusu를합니다.

Mac의 zsh
11:30:13 [~/gce-cron-test] % 
11:30:23 [~/gce-cron-test] % 
11:30:23 [~/gce-cron-test] % git push origin master
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 4 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 3.48 KiB | 891.00 KiB/s, done.
Total 5 (delta 0), reused 0 (delta 0)
To https://source.developers.google.com/p/my-gce-app/r/gce-cron-test
   938ea70..44abc4d  master -> master
11:31:37 [~/gce-cron-test] % 

[3] 마스터에서 CloudShell의 복제본으로 pull



CloudShell에서 마지막으로 복제한 리포지토리에 pull합니다.

cloudshell
cloudshell:09/26/20 02:54:33 ~/gce-cron-test $ git pull origin master

CloudShell 리포지토리에 추가되었는지 확인합니다. (나중에 새는 requirements.txt를 추가하고 있습니다.)

cloudshell
cloudshell:09/26/20 02:55:06 ~/gce-cron-test $
cloudshell:09/26/20 02:55:06 ~/gce-cron-test $ ls -la
total 40
drwxr-xr-x  3 hoge hoge 4096 Sep 26 02:52 .
drwxr-xr-x 13 hoge rvm        4096 Sep 23 11:18 ..
-rw-r--r--  1 hoge hoge   80 Sep 23 11:09 cron.log
-rw-r--r--  1 hoge hoge  146 Sep 23 09:03 cron-test.py
-rw-r--r--  1 hoge hoge 6148 Sep 26 02:47 .DS_Store
drwxr-xr-x  8 hoge hoge 4096 Sep 26 02:52 .git
-rw-r--r--  1 hoge hoge 2352 Sep 26 02:47 my-web-scraping-app-hogehoge.json
-rw-r--r--  1 hoge hoge 2763 Sep 26 02:47 requests-test2.py
-rw-r--r--  1 hoge hoge  334 Sep 26 02:52 requirements.txt

[4] requirements.txt를 사용하여 필요한 모듈의 대량 설치



requirements.txt를 사용하여 필요한 모듈을 대량으로 설치합니다.

cloudshell
cloudshell:09/26/20 02:55:10 ~/gce-cron-test $ pip install -r requirements.txt

pip의 list를 확인합니다.
Mac 로컬에서 "pip freeze > requirements.txt"로 통째로 필요한 모듈을 requirements.txt에 넣고 있기 때문에, 당연히 제대로 갖추어져 있습니다.

cloudshell
cloudshell:09/26/20 02:55:41 ~/gce-cron-test $ pip list
Package              Version
-------------------- ---------
appdirs              1.4.4
beautifulsoup4       4.9.1
cachetools           4.1.1
certifi              2020.6.20
chardet              3.0.4
distlib              0.3.1
filelock             3.0.12
google-auth          1.21.0
google-auth-oauthlib 0.4.1
gspread              3.6.0
httplib2             0.18.1
idna                 2.10
oauth2client         4.1.3
oauthlib             3.1.0
pip                  20.1.1
pyasn1               0.4.8
pyasn1-modules       0.2.8
requests             2.24.0
requests-oauthlib    1.3.0
rsa                  4.6
setuptools           47.1.0
six                  1.15.0
soupsieve            2.0.1
urllib3              1.25.10
virtualenv           20.0.31
WARNING: You are using pip version 20.1.1; however, version 20.2.3 is available.
You should consider upgrading via the '/home/hoge/.pyenv/versions/3.8.5/bin/python3.8 -m pip install --upgrade pip' command.

[5] 스크래핑 실행



스크래핑 PGM "requests-test2.py"를 실행해보십시오.

cloudshell
cloudshell:09/26/20 02:55:49 ~/gce-cron-test $ python requests-test2.py
Traceback (most recent call last):
  File "requests-test2.py", line 40, in <module>
    sheet = get_gspread_book(secret_key, book_name).worksheet(sheet_name)
  File "requests-test2.py", line 20, in get_gspread_book
    credentials = ServiceAccountCredentials.from_json_keyfile_name(secret_key, scope)
  File "/home/hoge/.pyenv/versions/3.8.5/lib/python3.8/site-packages/oauth2client/service_account.py", line 219, in from_json_keyfile_name
    with open(filename, 'r') as file_obj:
FileNotFoundError: [Errno 2] No such file or directory: '/Users/hoge/git-repository/env2/my-web-hoge-app-hogehoge.json'

실수로 그런 파일이 없습니다. Mac 로컬의 풀 패스 지정이 남았기 때문에 당연합니다.
로컬은 VScode이지만 CloudShell의 코드 편집기에서 수정합니다.

cloudshell
cloudshell:09/26/20 02:55:55 ~/gce-cron-test $ pwd
/home/hoge/gce-cron-test
cloudshell:09/26/20 02:56:12 ~/gce-cron-test $ cloudshell open requests-test2.py

"cloudshell open"명령으로 코드 편집기가 시작되므로 json 경로를 수정합니다.


재실행입니다.

cloudshell
cloudshell:09/26/20 03:00:32 ~/gce-cron-test $
cloudshell:09/26/20 03:00:33 ~/gce-cron-test $ python requests-test2.py
2020/09/26 03:01:15 スクレイピングを終了しました。
cloudshell:09/26/20 03:01:18 ~/gce-cron-test $

무사히 스크래핑 할 수있었습니다.
덧붙여 소스의 전용은 이쪽. 초보자가 파이썬으로 웹 스크래핑 (2)
GCP의 시간은 기본적으로 UTC이므로 도쿄 시간 -9 시간입니다.


다음 번에는 Google Compute Engine에 VM을 만들고 스크래핑 동작을 확인하고 cron에서 자동 실행에 도전합니다.

좋은 웹페이지 즐겨찾기