커피빈 크롤링 오류
href=# => 화면 상단으로 올리라는 의미
클릭할 수 없는 객체로 오류 발생.
강남구 선택 => li 정보가 있는 상태임.
명시적인 ~ : 관심이 있는 태그가 있을 때까지 기다리겠다
갱신이되지않았음에도 미리 읽어서 정보를 가져오기에, 갱신될 정보가 아니라서 오류 발생.
=> 셀레니움을 사용하지 않고 스크래피를 사용하면 될 듯.
동기식 방식임.
집에서 라면을 끓이고 청소를 하다가 전화를 해야함.
비동기식 방식
라면을 다 끓이고, 청소를 다 하고, 통화를 할 수 있어야.
쓰레드(thread)
동시에 여러 프로그램을 돌린다.
강남구, 강북구 등에 대한 쓰레드를 동시에 돌림.
없었던 걸 찾는 거라 기다렸다가 나타날때 크롤링 가능.
동적 웹 페이지 크롤링 기반으로 매크로 투표 티켓팅도 가능.
사람이 누른데 시간이 부족하기 때문에 자동화 프로그램도 작성도 가능.
슈도코드를 작성후 코딩을 하는 것이 일반적.
시간이 지나면 왜 이렇게 짰는지 이해가 잘 안감
자세하고 구체적으로 주석을 다는 습관들이기
스크롤을 내릴 때마다 url이 바뀜
import time
import urllib
from selenium import webdriver
driver = webdriver.Chrome('../chromedriver/chromedriver.exe')
url = 'https://www.google.co.kr/imghp?hl=ko&tab=ri&ogbl'
driver.get(url)
input_box = driver.find_element_by_css_selector('.gLFyf.gsfi')
# 공백은 .으로 바꿔준다.
# 마우스 이벤트 모방
input_box.click()
input_box.send_keys('nft')
input_box.click()
# 스크롤을 내릴 때 스크롤이 지금 어디 위치에 있는지 알아야
# 내린 후 스크롤 위치 확인(height=0에서 잠시 기다림)
SCROLL_PAUSE_TIME = 1
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
# 초깃값: max
# 현재값: 바닥값
while True:
# Scroll down to bottom
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Wait to load page
time.sleep(SCROLL_PAUSE_TIME)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
try:
driver.find_element_by_css_selector('') # 결과 더보기 클릭
except:
break
last_height = new_height
images = driver.find_element_by_css_selector('rg_i Q4LuWd')
index = 0
for image in images:
image_url = image.get_attribute('src')
index += 1
if image_url != None:
urllib.request.urlretrieve(image_url, f"../images/{index}.jpg")
print(index, image_url)