본문 바로가기

웹크롤링

2. 스크래이핑

1. 쿠키를 이용한 접근: 한빛출판네트워크에 로그인해서 쇼핑정보 가져오기

 

 

 

 

F12의 네트워크 탭을 킨 상태로 로그인을 하여 확인해 보면 

로그인 데이터가 POST방식으로 login_proc.php로 이동하는 것을 알 수 있다.

 

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

USER=" "
PASS = " "

session = requests.session()

login_info = {
    "m_id": USER,
    "m_passwd": PASS
}

#POST로 데이터 보내기
url_login = "http://hanbit.co.kr/member/login_proc.php"
res = session.post(url_login, data = login_info)
res.raise_for_status() #오류 발생하면 예외 발생

url_mypage = "http://www.hanbit.co.kr/myhanbit/myhanbit.html"
res = session.get(url_mypage)
res.raise_for_status()

soup = BeautifulSoup(res.text, "html.parser")
mileage = soup.select_one(".mileage_section1 span").get_text()
ecoin = soup.select_one(".mileage_section2 span").get_text()
print("마일리지:" + mileage)
print("이코인: " + ecoin)

위와 같이 requests 모듈을 이용하여 로그인 정보를 담은 세션을 POST로 login_proc.php로 보내면 로그인이 되고 로그인 후 정보를 알 수 있다.

 

 

2. 웹브라우저를 이용한 스크래이핑

Selenium이란 웹브라우저를 원격으로 조작하는 방식이다. 보안상의 이유로 웹브라우저를 통해서만 데이터를 가져올 수 있는 경우가 있다. 이 때 Selenium을 이용하여 웹브라우저를 조작하여 웹 데이터에 접근하면 된다.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import pyperclip

chrome_path = "...\\chromedriver_win32\\chromedriver.exe"
url_login = "https://nid.naver.com/nidlogin.login"
url_shopping = "https://order.pay.naver.com/home?tabMenu=SHOPPING"

driver = webdriver.Chrome(chrome_path)
driver.get(url_login)
time.sleep(1)

# id, pw 입력할 곳을 찾기
tag_id = driver.find_element_by_name('id')
tag_pw = driver.find_element_by_name('pw')
tag_id.clear()
tag_pw.clear()
time.sleep(1)

# id 입력
tag_id.click()
pyperclip.copy('내id')
tag_id.send_keys(Keys.CONTROL, 'v')
time.sleep(1)

# pw 입력
tag_pw.click()
pyperclip.copy('내비밀번호')
tag_pw.send_keys(Keys.CONTROL, 'v')
time.sleep(1)

# 로그인 버튼을 클릭합니다
login_btn = driver.find_element_by_id('log.login')
login_btn.click()

#바로 하면 페이지 이동이 안될 수 있다.
time.sleep(3)

#쇼핑페이지 데이터 가져오기
driver.get(url_shopping)

#쇼핑목록 출력 
products = driver.find_elements_by_css_selector("p.name")

for product in products:
    print("-", product.text)

책에서는 PhantomJS를 썼는데 이게 유지보수가 더이상 안된다고 해서 크롬으로 변경하였다.

chrome_path는 아래 사이트에서 내 크롬에 맞는 버전의 크롬 드라이버를 다운받아 경로를 입력하면 된다.

https://sites.google.com/a/chromium.org/chromedriver/downloads

 

Downloads - ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

sites.google.com

 

또한 책의 방식이 캡차에 걸려서 안되기 때문에 검색을 통해 이를 해결할 방법을 적용했다.

pyperclip으로 아이디, 패스워드를 복사, 붙여넣기 방식으로 입력하는 것이다.

'웹크롤링' 카테고리의 다른 글

1. 웹크롤링과 스크레이핑  (0) 2020.09.07