크롤링

[크롤링]4. selenium 실습

CodeJaram 2023. 6. 29. 08:12

크롤링_04_selenium 실습

[한솥도시락 데이터 크롤링]

1. 라이브러리 불러오기

● 웹브라우저 제어하기 위한 라이브러리(webdriver)

from selenium import webdriver as wb

 

● html 문서에서 태그와 선택자를 찾기 위한 라이브러리(By)

from selenium.webdriver.common.by import By

 

● 웹에 값을 입력하기 위한 라이브러리->컴퓨터용 키보드(Keys)

from selenium.webdriver.common.keys import Keys

 

● 컴퓨터가 이해하기 쉬운 객체 형태로 변환하는 라이브러리(BeautifulSoup)

from bs4 import BeautifulSoup as bs

 

2. 크롬창 열기(한솥도시락 메뉴 페이지 열기)

url=”한솥도시락 메뉴 페이지 url”

driver=web.Chrome()

driver.get(url) #페이지 가져오기

driver.page_source #html 문서 가져오기

 

3. 더보기 버튼 클릭하기

더보기를 클릭해야 전체 메뉴를 수집할 수 있음

 

1)’더보기’ 버튼의 위치 찾기(class 기준)

● elements→태그가 여러 개일 때

● element→태그가 한 개 일 때

-더보기 버튼의 태그는 1개이며 더보기 버튼을 눌렀을 때 새로 생기지 않고 메뉴 아래로 이동한다.

btn_more=driver.find_element(By.CLASS_NAME, 'c_05')

btn_more

 

2)’더보기’ 버튼 클릭하기

더보기 버튼 횟수보다 반복문 횟수가 더 많으면 오류 발생함(더보기 버튼이 없는데 클릭하므로)

더보기 버튼 횟수를 알 수 없으므로 try-except 문 사용하기

 

try:

#에러가 나기 전까지 실행할 부분을 try문에 작성

for i in range(15):

btn_more=driver.find_element(By.CLASS_NAME, 'c_05')

btn_more.click()

except:

#에러가 났을 때 실행할 부분을 except문에 작성

print('클릭 완료') #에러발생=>더보기 버튼이 없음=>더보기 버튼을 전부 누름

 

3)더보기 버튼 클릭 시 대기시간 지정

try:

#에러가 나기 전까지 실행할 부분

for i in range(15):

#첫번째 '더보기' 버튼 누르기 전에도 기다림 #1번

btn_more=driver.find_element(By.CLASS_NAME, 'c_05')

btn_more.click()

time.sleep(2) #2번

except:

#에러가 났을 때 실행할 부분

print('클릭 완료')

 

스크롤의 길이 변화

콘텐츠를 숨기고 있다가 스크롤을 내리면 콘텐츠를 보여줌

페이지 로딩시간이 걸려서 스크롤의 크기가 단계적으로 줄어든다

 

4. time 라이브러리 사용하기: 코딩 중간에 대기시간 지정

1)time 라이브러리 불러오기: import time

2)대기시간 지정: time.sleep(멈추는 시간(초 단위))

-지정한 시간만큼 기다렸다가 다음 코드 실행됨

-사람이 처리하는 것처럼 중간에 멈추어야 서버에 부하가 걸리지 않는다.

 

5. bs 객체화: bs(parsing할 html 문서, ‘parsing할 방법’)

soup=bs(driver.page_source, 'lxml')

 

6. 메뉴, 가격 태그 선택하기

● 메뉴: menu=soup.select('h4.h.fz_03')

● 가격: price=soup.select('div.item-price>strong')

 

7. 반복문을 사용하여 메뉴, 가격을 리스트에 저장하고 출력하기

menu_list=[]

price_list=[]

for i in range(len(menu)):

menu_list.append(menu[i].text)

price_list.append(price[i].text)

print(menu_list)

 

print(price_list)

8. 크롬창 닫기: driver.close()

 

[Gmarket 데이터 크롤링]

1. '지금 제일 잘나가는 상품' 1~10위 상품에 하나하나 접근하기(클릭)

2. 상품명, 상품가격, 카테고리 수집

3. 반복문을 사용하여 1~10위 데이터 수집하고 데이터 프레임형태로 출력

 

[크롤링 단계]

1. 지마켓 베스트 상품 페이지 불러오기

url='베스트 상품 페이지'

driver=wb.Chrome() #크롬창 열기

driver.get(url) #베스트 상품페이지 열기

 

2. 1위 상품 클릭

goods=driver.find_element(By.CLASS_NAME, 'itemname')

goods.click()

 

3. 상품명, 상품가격, 카테고리 수집

● bs 객체화: soup=bs(driver.page_source, 'lxml')

● 데이터 수집

-item_name=soup.select('h1.itemtit')

-item_price=soup.select('strong.price_real')

-item_ctg=soup.select('li.on>a')

 

4. 지마켓 베스트 상품 페이지 다시 불러오기

반복문에서 driver.get(url) 반복하기

 

5. 반복문을 사용하여 1~10위 상품 데이터 수집

6. 상품이름, 가격, 카테고리 컬럼이름으로 딕셔너리 생성

7. 데이터프레임으로 만들기

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

[크롤링]5. 이미지 데이터 수집  (0) 2023.07.04
[크롤링]3. selenium 라이브러리  (0) 2023.06.28
[크롤링]2. 크롤링 실습  (0) 2023.06.27
[크롤링]1. 크롤링 기초  (0) 2023.06.26