본문 바로가기

모바일환경코딩/python

[웹크롤링 따라하기] 구름ide에서 python가상환경 selenium모듈로 이미지크롤링 따라하기 - 3

반응형

조코딩님 댓글보니 오류가 있으면 추가하라는 부분이 있는데, 브라우저로 인식하도록 헤더를 추가하는 부분이 오류를 해결해 줄 것이라 믿어 의심치 않았다. 

 

헤더를 입력하는 부분이고 열심히 타이핑했다. 코드블럭이 이상하긴한데 이렇게라도 붙여 넣겠다.

opener = urllib.request.build_opener()
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML like Gekco) Chrome/36.0.1941.0 Safari/537.36')]
urllib.request.install_opener(opener)

 

해당 내용을 입력하는 부분은 반복문 시작전에 넣어두도록 하자. 한번만 불러오면 되니 반복문에는 넣지 않도록 주의하자!

헤더를 추가한다.

헤더를 추가 후 얼마나 이미지가 받아지는지 확인해 보자! 터미널에 python google.py 명령으로 코드를 실행해보자! 이미지파일이 잘 받아진다. 10장에서 머무르던 수준이 아닌 여러장을 받는다. cpu사용은 100%가 넘는 경우도 있었지만 대부분 96% 정도를 차지한다. 

cpu 사용율

이미지를 얼마나 받는지 지켜보았다. 명령이 끝나고 오류는 없었으며, 48장의 사진을 받을 수 있었다. 그러나! 검색된 이미지를 다 받아야 하기에 한번 더 여정을 거쳐야 한다. 이미지를 끝까지 스크롤해서 다 보이도록 하는 구문을 추가한다.

 

SCROLL_PAUSE_TIME = 1
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
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("mye4qd").click()  
        except:
            break  
    last_height = new_height

 

이 구문을 추가하며 중요한 부분은 while 과 if 등의 구문을 시작하고 끝내는 부분은 들여쓰기로 구문의 끝을 표시해야 한다는 것이다. 정렬을 잘 해야 구문이 오류 없이 실행된다. 그리고 가독성 또한 좋아서 어떻게 썼는지 알 수 있다. 

 

잘 구분하지 않으면 이런 에러가 날 수 있다.

구분을 잘 해야 한다

 

driver.execute_script("return document.body.scrollHeight") 

스크롤의 높이를 구하고

 

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

스크롤을 아래로 내린다. 

 

time.sleep(SCROLL_PAUSE_TIME)

1초를 기다렸다가..

 

다시 높이를 구하고

 

마지막 높이와 지금의 높이가 동일하면 더보기 버튼을 클릭하여 사진들을 더 본다.

 

버튼도 없고 구문이 끝났으면 반복문응 종료하기위해 사용하는 부분이다.

try:

    이 부분에서 버튼을 못 찾을 경우

except:

    반복문을 종료한다.

 

이렇게 넣어주고 이미지를 다운로드 하는 부분에도 혹시나 모를 오류가 발생하면 일단 건너뛰도록 하였다. 

 

다시 터미널에서 python google.py를 실행하였더니 137개의 이미지 파일이 다운받아졌다.! 드디어 성공이다!!

 

이미지 다운파일

실제로 파일을 실행해 보았더니 이미지가 잘 보인다. 저작권이 있을 수 있으니 다운받은 이미지파일은 게시하지 않겠다.