본문 바로가기
category/python

python web scraping

by 자운대고라니 2021. 2. 27.
반응형

안녕하세요??

자운대 고라니입니다.

오늘은 python web scraping에 대해서 글을 싸질러보겠습니다.


웹 스크래핑이란?

 

웹 스크래핑은 "웹 자동화 도구"라고 생각하시면 편하겠습니다.

웹 사이트에 자동으로 접속하여서 elem 값을 입력, 수정 등의 작업이 가능합니다.

 

예를 들면 python으로 naver 자동 로그인 프로그램을 만들다던가, google 자동 번역 프로그램을 만드는 등의 다양하게 활용할 수 있습니다.

그럼 간단하게 맛만 보실까요?

 


웹 스크래핑을 하기 위해선 두가지 조건이 필요합니다.

 

1.  selenium 받기

2.  web driver 설치

 

차례대로 알려드리겠습니다.

 

1.  selenium 받기

 

간단합니다. 터미널 창에 들어가서 pip install selenium 완료입니다.

 

2.  web driver 설치

 

저는 Chrome driver를 설치하겠습니다.

일단 google에 webdriver download라고 검색합니다.

위의 그림처럼 맨 윗쪽 사이트에 접속해줍니다.

그 후엔 버전마다 driver 설치 파일이 업로드돼 있는 것을 알 수 있습니다.

여기서 자신의 chrome 버전과 일치한 드라이버를 설치해주셔야합니다.

자신의 chrome 버전은 쉽게 확인할 수 있습니다.

우측 상단의 점 3개 클릭 -> 설정 클릭 -> 좌측 하단 Chrome 정보 클릭

이 사진은 제 chrome 정보입니다.

버전이 88.0.4324.190이므로 88.0.4324.96을 설치해주겠습니다.(88.0.4324까지만 일치하면 설치)

 

ChromeDriver 88.0.4324.96을 다운받으면 압축파일 하나가 생성될 겁니다.

해제하면 chromedriver.exe란 실행파일 하나가 생성되는데,

그 파일을 "내가 실행할 python 파일과 같은 폴더에 둡니다."

 

이렇게 하면 준비는 끝났습니다.

저는 간단하게 naver 자동 로그인 프로그램을 만들어보겠습니다.


소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
 
dv = webdriver.Chrome()            #chrome 드라이버를 사용하겠다.
dv.get("https://www.naver.com"#chrome으로 naver에 접속하겠다.
 
elem = dv.find_element_by_class_name("link_login"#class이름이 link_login인 element를 가져오겠다.
elem.click() #해당 element를 클릭한다.
 
elem = dv.find_element_by_name("id"#name이 id인 값을 가져오겠다.
elem.send_keys("내 ID")              #name이 id인 elem에 ID를 넣는다.
elem = dv.find_element_by_name("pw"#name이 pw인 값을 가져오겠다.
elem.send_keys("내 PW")              #name이 pw인 elem에 PW를 넣는다.
elem = dv.find_elements_by_class_name("btn_global")[0#class이름이 btn_global 이란 값 중 첫번째의 값을 선언하겠다.
elem.click() #해당 element를 클릭한다.
cs

일단 소스 코드를 먼저 보시면 대충 어떤 느낌으로 코딩을 해야 하는지 느낌이 올 겁니다.

차근차근 설명해드리겠습니다.

 


 

제일 먼저 제가 scraping 할 naver에 먼저 접속해보겠습니다.

그 후 크롬 기준 f12를 누르면 개발자 도구가 나옵니다 그중 아래의 그림과 같이 빨간색 표시된 부분을 클릭합니다.

그 후 자신이 element 값을 알기 위한 웹페이지 요소에 마우스를 올려주면 element 정보가 나옵니다.

저는 naver 로그인의 element를 읽어와야 하기 때문에 naver 로그인에 마우스를 올려봤습니다.

그랬더니 a.link_login이란 element 정보가 나왔습니다.

더 자세한 정보를 알기 위해선 마우스로 클릭해주면 우측 개발자 도구에 더 상세한 내용이 찍히도록 돼있습니다.

저는 "link_login class를 click 한다"라는 파이썬 코드를 짜야합니다.

1
2
elem = dv.find_element_by_class_name("link_login")
elem.click()
cs

이 부분입니다.

그 후엔 naver 로그인 form으로 접속하게 됩니다. 아래 그림과 같이요.

로그인을 하기 위해서는 ID입력, PW입력, 로그인 클릭 이 3가지 과정을 거쳐야 합니다.

element를 얻는 방법은 위에서 소개했기 때문에 따로 설명하지 않겠습니다.

1
2
3
4
5
6
elem = dv.find_element_by_name("id")
elem.send_keys("내 ID")
elem = dv.find_element_by_name("pw")
elem.send_keys("내 PW")
elem = dv.find_elements_by_class_name("btn_global")[0] #btn_global class는 여러개있다.(list형) 그 중 첫번째 인자값을 받아준다.
elem.click()
cs

 

이 부분이 ID입력, PW입력, 로그인 클릭을 하는 과정의 소스코드입니다.

 

그렇다면 해당 프로그램이 잘 실행되는지 한번 확인해봤습니다.

그런데......

naver에서는 제가 자동화 툴을 사용한다고 캐치하여서 자동 입력 방지 문자를 입력하라고 나왔습니다.

솔직히.... 진짜 솔직히..... 제가 먼저 코드를 짜 보고 글을 쓰는 게 아니라, 글을 쓰면서 코드를 짠 거라서

이건 예상 못했네요ㅎㅎ;;;

 

하지만 방지 문자만 안 나왔다면 제가 만들고 싶은 프로그램은 잘 돌아가는 것을 확인할 수 있었습니다.

 

naver 접속 -> naver 로그인 클릭 -> id, pw 입력 후 로그인 버튼 클릭

 

저와 똑같은 코드를 사용한다면 이 과정이 매끄럽게 진행되는 것을 알 수 있습니다.


정말 간단한 프로그램을 만들어서 별로 쓸데없다고 느끼실 수 있는데, 잘만 활용한다면

웹페이지 업무 자동화에 큰 도움이 될 수 있을 거라 장담하겠습니다.

 

그리고 오늘 짠 코드는 어떻게 하면 방지 문자가 안 나오고 login 할 수 있을지 한번 생각해보겠습니다..ㅠㅠㅠㅠ

 

이상으로 글을 마치겠습니다.

감사합니다.

 

반응형

댓글