본문 바로가기

잡 메모

[잡 메모] Python3 로그인 필요한 웹 페이지 크롤링

앱 만들기 팀 프로젝트를 진행하는데, 우리학교 트리니티에 있는 정보가 필요해서 웹 크롤링을 공부하고 만들려고 했다. 로그인 까지만 하고 중간에 크롤링 할 필요가 없어져서 그만뒀다. ㅎ

이 글은 웹 크롤링을 하는법이 아닌, 웹 크롤링시 로그인이 필요한 웹에 로그인 하는 방법과 팁..?을 적은 글이다. 

파랑색 글자는 내가 이해한 방식이다. 틀릴수도있다.

기본 설정

파이썬을 이용해 웹 크롤링 코드를 짰는데, 터미널을 켜고 

 

pip install requests beautifulsoup4 를 입력해주자.

(pip버전이 낮을경우 pip3 install requests beautifulsoup4 라고 입력해야한다.)

 

설치가 완료되면 기본 설정은 끝이다.

웹 크롤링 로그인...

소스코드를 보기전에 로그인 요청을 받았을때 웹이 로그인을 진행하는 과정을 알아야 한다. 크롬을 켜고 로그인할 페이지에들어가서 개발자 도구를 열자. (alt + command + i 혹은 보기 -> 개발자 정보 -> 개발자 도구)

 

위와같이 로그인 창이 있는 화면에서 개발자 도구를 켜면

다음과 같은 화면이 뜰것이다. 맨 위에 Network를 클릭하고 preserve log를 체크하고 DOC를 클릭한후 로그인을 시키자. 빨강색점에 불이 안들어왔다면 저것도 눌러야한다. (아래사진 참고)

빨강색 동그라미가 쳐져있는곳을 저상태로 바꾸고 로그인을 진행하면 

Name아래에 뭔가 많이 생긴걸 볼수있다. 로그인을 클릭하면 순서대로 데이터값..?을 전달하는 페이지가 뜨는것 같다.

저기서 크게 3가지를 찾아야한다.

 

1. 실제 아이디와 비밀번호를 처리하는 주소

-> 아이디와 비밀번호를 친다고 그 url에서 바로 처리하는것이아닌, 다른 url로 옮기고 처리를 한다.

2. 1번에 있는 주소로 전달하는 데이터값 (아이디와 비밀번호 +??)

-> +a는 사이트마다 다르다. 어떤사이트의 경우 +?? 가 여러가지일수도있고 어떤 사이트는 +??가없이 아이디와 비밀번호만 전달할수도있다.

3. 데이터 전달방식 POST등

 

나는 위 정보가 processAuthnResponse.do에 있었다.(사이트마다 다르다 어떤 사이트는 다른이름으로 저장되어있을수 있다.) 해당 정보를 클릭하고 Headers를 누르자.

 

 

General 과 Form Data값만 필요하니 저 두개만 열어두자

 

Request Method(뒤에 hod가 짤렸다.)가 데이터 전달방식 (3번) 나는 POST였음

userID, password 가 전달하는 데이터값 (userID와 password에는 각자의 id password가 저장되어있다)

returnPage가 로그인 처리 주소 였다.

 

이제 파이썬으로 돌아가 코드를 짜야한다.

주석을 보도록 하자

그런데 저렇게만 입력해도 되는 사이트가 있는반면, 안되는 사이트도 있었다. (내가 그랬음)

 

분명 아이디 비번도 맞고 로그인 처리 url도 맞았는데 뭐가 문제인지 한참 해맸다..

다른 블로그에서 로그인시 보안목적으로 sqrf값을 전달하는 사이트도 있다는것을 보고 내가 크롤링할 사이트도 눈에 안보이는?? 데이터 값이 있을수도 있다고 생각했다.

나같은경우는 samlRequest이놈이였다..

이걸 찾는방법은

다시 로그인 화면으로 돌아가개발자도구(alt + command + i)를 열고 네트워크가 아닌 Elements로 돌아가자

우측 상단에 이걸 누르고 ID입력하는 부분을 누른다.

그러면

<input type = "text" id= "userId" name="userId"...>이런 비슷한게 보일거다.

얘 근처에 input type이 더 있을건데, 그 input type중에 다른 전달하는 값을 찾으면된다.

나는 이런식으로 hidden으로 감춰진 input값이 또 있었다. 이거말고도 인풋값이 여러개 있었는데(아이디 비번 말고도 5개는 넘게있었던듯..?), 그중에 하나를 찾기위해서 Network를 열었다.

 

Network를 열어보니까

어디서 많이 본거같다.. 로그인 처리 url과 똑같이 생겼다

이걸 누르고 Form Data를 열자 여기에 SAMLResponse ~~ 가 있는걸 볼수있는데, 위에서 봤던 samlRequest를 주면 SAMLResponse로 응답하는거 같았다. 혹시나 해서 이걸 추가했고 무사히 크롤링됐다. 

여기까지 진행하고 안 사실인데, 내가 필요한 정보는 크롤링할 필요도없이 학교 홈페이지 구석에 다운받기를 누르면 엑셀로 다운받을수있었다...

눈이 안좋으면 몸이 고생하는거같다..

 

나중에 크롤링할일이 있으면 써먹어야겠다