수달이네 기술 블로그

6. 셀레니움을 이용한 크롤링 2: 이미지 본문

AI공부/머신러닝

6. 셀레니움을 이용한 크롤링 2: 이미지

슬픈 수달이 2025. 12. 1. 21:55

이미지 크롤링

from selenium import webdriver

driver = webdriver.Chrome()
url = '<https://pixabay.com/ko/images/search/강아지/>'
driver.get(url)

이미지 사이트에 들어감(크롬으로 url을 검색해서 들어가줌)

from selenium.webdriver.support.ui import WebDriverWait

image_xpath = '/html/body/div[1]/div[1]/div/div[2]/div[3]/div/div/div/div[2]/div/a/img'   #이미지 자체의 xpath

wait = WebDriverWait(driver,10)    #최대 10초까지 기다려
image_element = wait.until(EC.presence_of_element_located((By.XPATH, image_xpath)))   #여기서 이미지가 나타나면 넘어가, 아니면 10초까지 기다려
  1. 이미지가 존재하는 사이트의 이미지를 불러오고,
  2. 이미지가 불러올때 까지 기다리기 위해 WebDriverWait을 이용한다.(WebDriverWait(드라이버, 초)
  3. 이제 무얼 기다리는지 에 대한 내용을 작성(이미지가 나타나면 넘어가, 아니면 10초까지 기다려)
image_url = image_element.get_attribute('src')  
image_url

# '<https://cdn.pixabay.com/photo/2020/07/17/06/41/puppy-5413165_640.jpg>'

url내의 속성에서 src라는 링크를 얻어온다.

Request Header

사용자가 사이트에 요청하는 정보들이 들어있음

  • 즉, 내 정보들이 들어있음.
  • 나는 어떤 방식(get, post)
  • 어떤 프로토콜을 사용하고 있고,
  • 난 어떤 브라우저 엔진을 사용하고 있고,
  • 난 크롬을 사용하고 있어 등등..
  • 크롤링 프로그램이 요청하면 user-Agent가 없다. 그렇기 때문에 userAgent정보를 같이 요청해줘야한다.(차단 무시)

  • response header: 내가 어떤 정보를 가지고 있으니 브라우저에게 어떻게 해줘라고 하는 것
  • 즉, 응답 정보들이 들어있음.
image_byte = Request(image_url, headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'})
#headers의 User-Agent에 해당 값을 넣어줌 
  • 위처럼 Request header의 user-agent를 수정해주면 이미지를 바이트파일로 가져올 수 있게 된다.
with open('dog2.jpg','wb') as f: #wb: write binary 이진 파일을 써준다.
    f.write(urlopen(image_byte).read())
print('다운로드 완료!')

이제 해당 바이트 파일을 jpg에 써주면,

이미지를 다운로드 할 수 있게 된다,

크롤링 윤리

https://pixabay.com/robots.txt

대부분의 사이트에선 robots.txt를 입력하면, 허용하는 부분,허용하지 않는 부분등 을 표기해둔다.

  • 크롤링의 윤리적인 문제는 알아서 지키자.
  • 대부분의 사용자는 불허한다고 써놓는다. 저작권, 크롤링 윤리등 문제.

여기서,

User-agent: *
Allow: /api/docs/
Allow: /static/*.*

이런식으로 크롤링이 허용된 부분이 있고,.

Disallow: *?*orientation=*
Disallow: *?*manual_search=*
Disallow: *?*min_width=*
Disallow: *?*min_height=*
Disallow: *?*date=*

허용되지 않은 부분이 있다. 사실 거의 대부분 허용이 안된다.