SK networks AI Camp - Crawling_Selenium
저번 시간에는 정적수집에서 사용하는 beautifulsoup에 관하여 알아봤습니다.
json 형식을 받아서 저장하기 위하여 beautifulsoup를 사용하였는데요.
selenium의 경우 동적 웹페이지에서 사용하기 위하여 사용합니다.
이번 포스팅에서는 네이버 자동 로그인과 네이버 페이 목록 출력에 관한 크롤링을 진행할 것입니다.
2024.07.22 - [컴퓨터 공학/Networks] - SK networks AI Camp - Crawling
SK networks AI Camp - Crawling
Web Crawling vs Web Scraping○ Wep Scraping : 웹 사이트 상에서 원하는 정보를 추출하는 방법○ Wep Crawling : 웹 크롤러가 정해진 규칙에 따라 복수 개의 웹 페이지를 탐색하는 행위(= 웹 스파이더링)크롤링
joowon582.tistory.com
지금부터는 브라우저를 Chrome으로 통일하여 사용했습니다.
Chrome 드라이버 설치
○ 크롬버전 확인 : 크롬 주소창에 Chrome://version을검색
제일 위에 Google Chrome :이라고 되어있는 부분이 버전입니다.
이후 아래의 링크를 통해 다우운로드 링크를 들어가 주세요.
chrome-for-testing/data/latest-versions-per-milestone-with-downloads.json at main · GoogleChromeLabs/chrome-for-testing
Contribute to GoogleChromeLabs/chrome-for-testing development by creating an account on GitHub.
github.com
저의 경우 버전이 126.x.x..인데요.
그러면 Ctrl + F를 통하여 126을 검색해 주시고 사진과 같은 형태에서
Chrome Driver 부분에 OS버전에 맞는 것을 설정해 주세요.
url 부분을 복사해서 들어가면 zip 파일로 되어있는 것을 다운해 주시고
압축해제 후 chromedriver.exe를 실행해 주면 설치가 끝납니다.
이제 Chrome Driver를 설치했다면
VS Code에서 터미널을 열어 아래의 코드를 입력해 주세요.
python -m pip install --upgrade pip
pip install selenium
가상환경 파이썬 3.12 버전에서 진행하겠습니다.
가상환경 설정은 아래의 링크를 참고해 주세요.
2024.07.08 - [컴퓨터 공학/Networks] - SK networks AI Camp - Python, Git 등 설치
SK networks AI Camp - Python, Git 등 설치
SK networks AI Camp 3기가 24.7.8일 자로 오픈 했어요!오늘은 하루 정도 설치만 했답니다.교육을 위해 사용할 여러가지 툴들을 설치합니다!1. Python2. VS Code3. Git4. Docker 딥러닝, 머신러닝을 하기에 적합
joowon582.tistory.com
그리고 selenium, requests, beautifulsoup도 설치해 주세요.
설치는 아래의 링크 참고해 주세요.
2024.07.22 - [컴퓨터 공학/Networks] - SK networks AI Camp - Crawling
SK networks AI Camp - Crawling
Web Crawling vs Web Scraping○ Wep Scraping : 웹 사이트 상에서 원하는 정보를 추출하는 방법○ Wep Crawling : 웹 크롤러가 정해진 규칙에 따라 복수 개의 웹 페이지를 탐색하는 행위(= 웹 스파이더링)크롤링
joowon582.tistory.com
ex05.ipynb 파일을 하나 생성해 주시고
아래의 코드를 통해 임포트 해주세요.
from selenium import webdriver
from selenium.webdriver.common.by import By
그러면 제대로 설치되었는지 확인을 위해 아래의 코드를 입력해 주세요.
driver = webdriver.Chrome()
url = "https://www.google.com/"
driver.get(url)
driver.implicitly_wait
실행을 하였을 때 Chrome으로 google이 열린다면 성공한 것입니다.
하지만 저희는 Naver와 관련된 내용으로 학습할 것이므로 url을 naver로 바꿔주세요.
driver = webdriver.Chrome()
url = "https://www.naver.com/"
driver.get(url)
driver.implicitly_wait
예제 1. css 요소 데이터 불러오기
driver.get을 통하여 해당 링크를 받아오고 CSS의 요소 데이터를 불러올 수 있습니다.
아이디가 namedColor라는 것의 css 정보를 불러와서 배경색을 cssValue 변수에 저장하여 출력한 코드입니다.
driver = webdriver.Chrome()
driver.get('https://www.selenium.dev/selenium/web/colorPage.html')
driver.implicitly_wait(3)
cssValue = driver.find_element(By.ID, "namedColor")\
.value_of_css_property('background-color')
cssValue
예제 2. text 가져오기
전체 문서에서 ID로 찾아서 해당 ID가 justanotherLink인 것을 식별하여 그 text를 가져옴
driver = webdriver.Chrome()
driver.get('https://www.selenium.dev/selenium/web/linked_image.html')
driver.implicitly_wait(3)
text = driver.find_element(By.ID, 'justanotherLink').text
text
이제 아까 말했던 네이버 검색하기 예제를 해볼게요.
Selenium 연습 1. 네이버 자동로그인하기
1. 모듈을 설치
저는! (느낌표)를 사용하여 ipynb 파일에서 실행하였어요.
터미널에서 느낌표를 빼고 설치해 줘도 돼요.
!pip install pyperclip
이후 모듈들을 import 해줄게요.
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import Keys, ActionChains
import pyperclip
2. selenium의 webdriver 모듈을 이용하여 chrome driver를 사용해 chrome 브라우저 객체 생성
객체를 생성하여 chrome 브라우저 객체에게 http get 메서드를 사용해서 네이버 접속을 명령한 코드입니다.
○ implicitly_wait
: selenium의 경우 설명드렸듯이 직접 하는 것이 아니라 chrome에게 명령을 내려하는 것이기에 접속 시간이 느립니다.
그래서 기다리라는 명령입니다.
(주의 : 컴파일 결과 나오는 창을 통해 이동할 것이므로 창을 닫지 말아 주세요.)
chrome = webdriver.Chrome()
url = 'http://www.naver.com'
chrome.get(url)
chrome.implicitly_wait(3)
3. 해당 chrome 객체를 통해 naver login 화면으로 이동
첫 번째 줄에 value에 적힌 class 이름이 "MyView-..." 부분을 복사해서
아까 떴던 창에서 F12를 누르고 ctrl+F 를 눌러서 검색해 보면 로그인 버튼 클래스인 것을 알 수 있어요.
그리고 코드를 실행하면 두 번째 사진과 같이 넘어가는 것을 알 수 있어요.
# 네이버 로그인화면으로 이동
elem = chrome.find_element(By.CLASS_NAME, value="MyView-module__link_login___HpHMW")
elem.click()
chrome.implicitly_wait(3)
4. 로그인하기
각자의 os를 확인하는 코드입니다. id, pw입력이 맥북과 윈도가 달라서 확인을 해주는 것입니다.
import platform
os_base = platform.system()
os_base
아래의 코드(아이디 입력 코드)를 입력하면 아이디가 입력됩니다. ser_id 안에 입력해 주시면 됩니다.
ser_id = "input_your_id"
log_id = chrome.find_element(By.ID, value="id")
log_id.click()
pyperclip.copy(user_id)
chrome.implicitly_wait(3)
os_base = platform.system()
if os_base == 'Darwin':
log_id.send_keys(Keys.COMMAND, 'v') # 맥북인 경우
else:
log_id.send_keys(Keys.CONTROL, 'v') # 윈도우인 경우
chrome.implicitly_wait(3)
이제 자신의 비밀번호를 입력해 주세요.
user_pw = "input_your_password"
log_pw = chrome.find_element(By.ID, value="pw")
log_pw.click()
pyperclip.copy(user_pw)
chrome.implicitly_wait(3)
if os_base == 'Darwin':
log_pw.send_keys(Keys.COMMAND, 'v') # 맥북인 경우
else:
log_pw.send_keys(Keys.CONTROL, 'v') # 윈도우인 경우
chrome.implicitly_wait(3)
이제 로그인하기 버튼을 입력해 주는 코드를 작성해 볼게요.
그러면 이제 로그인이 됩니다.
(2차 인증을 등록하신경 우는 적지 않았습니다... ㅠㅠ)
log_btn = chrome.find_element(By.ID, value="log.login")
log_btn.click()
chrome.implicitly_wait(3)
5. Naver pay 들어가기
selenium이 느리기 때문에 코드를 나눠서 실행해 줄게요.
이어서 Naver Pay에 접속.
from bs4 import BeautifulSoup
# Naver 페이 들어가기
chrome.get('https://order.pay.naver.com/home')
chrome.implicitly_wait(10)
들어가서 데이터를 받아오고
html = chrome.page_source
soup = BeautifulSoup(html, 'html.parser')
notices = soup.find_all("span", class_="ProductName_article__zaafE")
출력을 해볼게요.
for n in notices:
print(n.get_text())
다음 포스팅에서는 Streamlit에 관해 적어볼게요.