글 작성자: nouu

selenium으로 내가 좋아하는 연예인의 이미지를 크롤링 해보고 싶어 이번 글을 쓰게 되었다.

 

selenium 외에 사용한 라이브러리는 urllib.requests의 urlretrieve, time을 사용했다. 원래는 이미지 다운로드 관련 라이브러리를 dload로 사용하려고 했다. 하지만 PYCHARM에는 해당 라이브러리가 안보였고, 주피터 노트북에서 pip 명령어로 다운로드는 됐지만 실행이 안되어 차선책으로 urlretrieve를 사용했고, 주피터 노트북으로 코드를 작성했다. 

 

우선 다른 블로그에서도 잘 나와있고, 아시다시피 selenium 라이브러리는 웹 드라이버를 깔고, 웹 드라이버에 자동으로 접속하여 제어를 할 수 있게 하는 라이브러리로 보통 웹 테스팅이나 크롤링 영역에서 자주 사용한다. 명령어로 특정 웹 페이지에 접속하여 로그인 할수도 있고, 특정 문자열을 입력하여 검색도 할 수 있는 기능등 여러가지 기능이 있다. 

 

그럼 본격적으로 내가 했었던 과정들을 작성해보겠다 .

 

 

selenium을 사용하기 위한 구글 크롬 드라이버 설치 

 

https://sites.google.com/a/chromium.org/chromedriver/downloads

 

Downloads - ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

sites.google.com

 

 

크롬의 우측 점 세개 클릭 후 도움말 > Chrome 정보를 통해 나의 내가 사용하는 크롬의 정보를 본다. 이후 위의 크롬 드라이버 설치 웹 페이지에 들어가서 내 Os에 맞게 다운로드 하면 된다. 21년 2월 18일 기준 88.0.4324.96 버전이 안정적인 배포 버전이라고 쓰여져 있다. 

 

다운로드를 받았으면 chromedriver.exe  파일이 생길 것이다. 이 파일을 기억할 수 있는 경로에 넣는다. 

 

 

selenium을 사용해 크롬 웹드라이버 제어하고, 필요한 구문 추출하기

from selenium import webdriver
import time

driver = webdriver.Chrome("C:/Users/HJ/jupyter_code/scrapy_and_selenium/chromedriver_win32/chromedriver.exe")
driver.get("https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%ED%83%80%EC%B9%B4%ED%95%98%EC%8B%9C%20%EC%A5%AC%EB%A6%AC" )
time.sleep(3)

images = driver.find_elements_by_css_selector("#imgList > div > a > img")
img_url = []

for image in images :
    url = image.get_attribute('src')
    img_url.append(url)

# print(img_url)

driver.quit()

 

위와 같은 코드로 다음과 같이 크롬 웹 드라이버를 제어할 수 있다. get() 메서드 안에 있는 url 웹 페이지가 켜진다.  sleep() 메서드에 의해 3초동안 대기 상태를 가진다. 이후 Chrome 클래스 안에 있는 find_elements_by_css_selector 함수로 필요한 html 구문만을 파싱하여 반복문을 통해 해당 태그에 있는 src 속성 값 만을 추출한다. 이후 img_url 리스트에 하나, 하나 넣는 코드 구문이다. (find_elements_by_css_selector 뿐만 아니라 다양한 메서드가 있다. 구글링이나 selenium 강좌를 통해 selenium의 통찰력을 키우길 바란다.) 

 

 

os를 사용하여 폴더 만들고 폴더 안에 파일 넣기

import os 

img_folder = './img'

if not os.path.isdir(img_folder) : # 없으면 새로 생성하는 조건문 
    os.mkdir(img_folder)
    
for index, link in enumerate(img_url) :
#     start = link.rfind('.')
#     end = link.rfind('&')
#     filetype = link[start:end]
	urlretrieve(link, f'./img/{index}.jpg')

 

해당 코드로 내 컴퓨터의 폴더를 생성할 수 있다. 조건문으로 해당 경로의 폴더가 없다면, 해당 폴더에 폴더를 만들라는 코드이다. 그 다음 반복문 in 다음에 있는 enumerate로 index와 리스트 데이터를 같이 놓고, urlretrueve() 메서드를 통해 임의의 파일명을 등록하면 된다. 향상된 포맷팅 구문으로 경로와 파일명을 지정했다.

 

 

 

정리

from selenium import webdriver
import time

driver = webdriver.Chrome("C:/Users/HJ/jupyter_code/scrapy_and_selenium/chromedriver_win32/chromedriver.exe")
driver.get("https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%ED%83%80%EC%B9%B4%ED%95%98%EC%8B%9C%20%EC%A5%AC%EB%A6%AC" )
time.sleep(3)

images = driver.find_elements_by_css_selector("#imgList > div > a > img")
img_url = []

for image in images :
    url = image.get_attribute('src')
    img_url.append(url)

# print(img_url)


import os 

img_folder = './img'

if not os.path.isdir(img_folder) : # 없으면 새로 생성하는 조건문 
    os.mkdir(img_folder)
    
for index, link in enumerate(img_url) :
#     start = link.rfind('.')
#     end = link.rfind('&')
#     filetype = link[start:end]
	urlretrieve(link, f'./img/{index}.jpg')

 

 

 

다음과 같이 이미지 파일이 잘 저장된 것을 볼 수있다.

 

참고 자료

 

hololo-kumo.tistory.com/129?category=865282

 

2] Selenium 실습 2 : 검색과 이미지 크롤링

1. 검색하기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from selenium import webdriver path = "C:/chromedriver/chromedriver.exe"    #웹드라이버가 있는 경로 driver = webdriver.Chrome(path)   ..

hololo-kumo.tistory.com

nowonbun.tistory.com/688

 

[Python] Selenium 라이브러리 (자동 웹 테스팅, 스크래핑)

안녕하세요. 명월입니다. 이 글은 Python에서 Selenium 라이브러리에 대한 글입니다. 먼저 Selenium이란, 웹 브라이져의 드라이버에 접속하여 제어를 할 수 있게 하는 라이브러리로 보통 웹 테스팅이나

nowonbun.tistory.com

creatorjo.tistory.com/85?category=883823

 

파이썬 크롤링(웹 스크래핑) - 이미지 스크래핑하기, dload, selenium, bs4

※스파르타 코딩 파이썬 무료 강의 정리 이번 글은 파이썬으로 이미지 웹 스크래핑 하는 방법을 정리해보려한다! 웹 스크래핑이란 '웹 페이지에서 내가 원하는 부분의 데이터를 수집해오는 것'

creatorjo.tistory.com

 

참 많은 도움이 됐습니다. 감사합니다.