크롤링_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 |