"2. 로그인하기"의 두 판 사이의 차이

Pywiki
둘러보기로 가기 검색하러 가기
 
59번째 줄: 59번째 줄:
 
=== 준비물 ===
 
=== 준비물 ===
 
Selenium : 웹 어플리케이션 테스트를 자동화 할 때 사용. 자동으로 URL을 열거나 클릭, 스크롤, 문자입력 등의 행동을 자동화할 수 있다.
 
Selenium : 웹 어플리케이션 테스트를 자동화 할 때 사용. 자동으로 URL을 열거나 클릭, 스크롤, 문자입력 등의 행동을 자동화할 수 있다.
 
PhantomJS : 명령줄에서 사용하는 웹 브라우저.
 
 
[[분류:웹 스크래핑]]
 
[[분류:웹 스크래핑]]

2021년 4월 7일 (수) 19:09 기준 최신판

1 개요[편집 | 원본 편집]

웹사이트를 돌아다닐 때 로그인해야만 접근할 수 있는 페이지가 있다.

2 전략[편집 | 원본 편집]

필요한 기능

  1. HTTP 요청하기
  2. 세션 다루기
  3. 페이지 분석하기
과정 설명 방법
준비 작동에 필요한 모듈을 불러오고 변수들을 지정한다.
  1. 필요한 모듈을 불러온다.
  2. 로그인에 필요한 정보들을 어떤 변수로 전달할지 입력한다.
    어떤 변수에 전달해야 할지는 개발자도구의 Network > doc 탭에서 정보의 이동을 보아야 한다.
  3. 요청할 주소를 지정한다.(이 또한 개발자도구로 데이터이동을 살펴 찾는다.)
import requests  # 요청 및 세션 다루기.
from bs4 import BeautifulSoup  # HTML페이지 분석

login_info = {"id담는변수":"아이디",  # 정보를 담는 변수는 사이트마다 다르다.
            "password담는변수":"패스워드"
            }
            
login_url = "http://주소./....php"  # 로그인 요청을 보내는 경로를 지정한다.
로그인요청 세션을 시작하고 페이지에 요청을 보낸다. 위 정보들을 토대로 진행한다.
session = requests.session()  # 세션을 시작한다.
res = session.post(login_url, data=login_info)  # 위에서 작성한 내용을 Post 방식으로 요청하고 응답받는다.
res.raise_for_statue()  # 오류가 발생하면 에러를 반환하게 한다.
세션이용 위에서 로그인된 상태를 이용하여 필요한 정보를 얻는다.
url = "http://주소"
res = session.get(url)  # url로 get 요청을 보낸 후 응답을 받는다.
res.raise_for_status()  # 오류가 발생하면 에러를 일으킨다.

soup = BeautifulSoup(res.text, "html.parser")  # 필요에 따라 페이지를 분석한다.

3 한 단계 더 나아가기[편집 | 원본 편집]

최근엔 자바스크립트 등으로 로그인을 처리해서 실제 웹브라우저를 사용해야만 로그인되는 경우가 많다. 자바스크립트로 데이터를 가져오는 경우, request모듈 등으로 데이터를 추출할 수 없다.

이처럼 HTML외의 기능으로 정보를 불러오는 경우, 웹브라우저를 이용해야 하는데, 다행히 웹브라우저를 조작하는 방법이 마련되어 있다.

3.1 준비물[편집 | 원본 편집]

Selenium : 웹 어플리케이션 테스트를 자동화 할 때 사용. 자동으로 URL을 열거나 클릭, 스크롤, 문자입력 등의 행동을 자동화할 수 있다.