SW 배움터/파이썬 업무 자동화

파이썬 웹 크롤링 방법 2

kusson 2022. 9. 17. 16:14
반응형
728x170

이번에는 파이썬 웹크롤링 방법2 시간으로  방법1과는 좀 다른 방식을 소개하겠다. 아직 '파이썬 웹 크롤링 방법 1'을 보지 않은 분들은 한번 읽어보고 와 주시기 바란다. 

방법1이 추출한 이미지를 한장씩 따로 따로 저장하는 방법이라면 방법2는 추출한 이미지 전체의 주소 링크를 저장하고 이미지 추출이 끝나면 한꺼번에 이미지를 다운 받는 형식이다.

이미지를 다운 받기 위한 selenium 과 크롬 드라이버등은 이미 설치가 되어 있는 것으로 간주하고 시작하겠다. 아직 selenium 과 크롬 드라이버가 설치가 되지 않은 분은 '파이썬 웹 크롤링 방법 1'의 앞부분을 보고 설치해 주기 바란다.

 

1. 구글 검색창의 CSS 선택자 복사하기

import urllib.request
import time
from selenium.webdriver.common.keys import Keys
from selenium import webdriver

driver = webdriver.Chrome('chromedriver')
driver.get(url=URL)

driver.implicitly_wait(time_to_wait=10)

elem = driver.find_element_by_css_selector(
    'body > div.L3eUgb > div.o3j99.ikrT4e.om7nvf > form > div:nth-child(1) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > input')
 
여기서 'body > div.L3eUgb > div.o3j99.ikrT4e.om7nvf > form > div:nth-child(1) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > input' 부분이 검색창의 CSS 선택자 부분이다. 이 부분을 driver.find_element_by_css_selector() 함수의 인수로 주고 elem 변수에 저장한다.

 

2. 검색창에 다운받기 원하는 이미지의 이름 넣어 검색하기

검색창에 'sea'라는 글자를 넣고 엔터키를 누른다.

 

elem.send_keys("sea")

elem.send_keys(Keys.RETURN)

 

반응형

3. '결과 더 보기' 버튼 찾아서 눌러주기

'body' 태그를 찾아 elem 이란 변수에 넣어준다. body안에 많은 이미지들이 나타나면 키보드의 'page Down' 키를 반복해서 눌러 준다. 화면의 제일 아래 부분에 이르면  '결과 더보기' 버튼이 있다. 웹 크롤링에서는 이 '결과 더 보기' 버튼을 클릭해 줘야 다음 검색 이미지들이 나타난다. 결과 더 보기' 버튼의 CSS 선택자를 복사해서 find_element_by_css_selector() 함수의 인수로 넣어 주고 클릭 한다.

elem = driver.find_element_by_tag_name("body")
for i in range(60):
    elem.send_keys(Keys.PAGE_DOWN)
    time.sleep(0.1)

driver.find_element_by_css_selector(
    '#islmp > div > div > div > div.gBPM8 > div.qvfT1 > div.YstHxe > input').click()

 

 

4.크롤링한 이미지를 모두 찾아 확인하기

이미지의 갯수를 세기 위한 links 배열을 선언하고 이미지들의 CSS 선택자를 images 변수에 넣어준다. 

각각의 이미지 CSS 선택자를 보면 

#islrg > div.islrc > div:nth-child(700) > a.wXeWr.islib.nfEiy > div.bRMDJf.islir > img,

#islrg > div.islrc > div:nth-child(701) > a.wXeWr.islib.nfEiy > div.bRMDJf.islir > img,

#islrg > div.islrc > div:nth-child(702) > a.wXeWr.islib.nfEiy > div.bRMDJf.islir > img,

등으로 되어 있는 것을 알 수 있는데 이때 div:nth-child(702) 부분을 div 로 변경해 주면 모든 이미지를 선택할 수 있다. 이 과정을 반복하고 그 이미지의 링크를 모두 리스트로 만든다.

links = []
images = driver.find_elements_by_css_selector(
    "#islrg > div.islrc > div > a.wXeWr.islib.nfEiy > div.bRMDJf.islir > img")

for image in images:
    if image.get_attribute('src') is not None:
        links.append(image.get_attribute('src'))
 
 
 
5. 크롤링한 이미지를 다운로드 받는 코드 만들기
 
각각의 이미지에 번호를 매기고 정해진 폴더에 jpg란 확장자로 저장한다.
 
print('total number:', len(links))

for k, i in enumerate(links):
    num = i
    urllib.request.urlretrieve(
        num, "C:\\google_image\\pythonWith40Work\\googleImages\\"+str(k)+".jpg")
 
424장의 이미지가 저장되었다.
 
 
이렇게 '파이썬 웹크롤링 방법1' 과는 좀 다른 방식으로 이미지를 다운받고 저장해 보았다. 이 2가지 방법 외에도 수많은 방식이 있을 수 있다. 다른 방식도 한번 생각해 보고 코드도 직접 작성해 보자.

 

반응형
그리드형