본문 바로가기
Python/크롤링

파이썬을 이용한 이미지 크롤링

by shinebee* 2020. 11. 17.

 

웹 스크래핑(크롤링)이란?

→ 웹 페이지에서 원하는 부분의 데이터를 수집해오는 것.

 

 

브라우저 제어

→ selenium 패키지를 이용하여 브라우저를 제어할 수 있다.

→ URL을 넣으면 바로 그 사이트를 열어준다.

 

1. selenium 패키지 설치 → 아까와 같은 방법 이용.

2. selenium을 사용하기 위해서는 웹 드라이버라는 파일도 필요하다.

  · selenium webdriver 설치 링크

    https://chromedriver.storage.googleapis.com/index.html?path=85.0.4183.87/

 

https://chromedriver.storage.googleapis.com/index.html?path=85.0.4183.87/

 

chromedriver.storage.googleapis.com

    → 이 링크에서 운영체제에 맞는 파일을 찾아 다운로드 받고, 압축을 풀어 python으로 옮기자.

3. selenium 시작코드

from selenium import webdriver
driver = webdriver.Chrome('chromedriver')

driver.get("http://www.naver.com")

→ 코드를 실행하면 naver 창이 열린다.

 

 

웹 스크래핑(크롤링)해보기

 '고양이'를 검색해 이미지를 스크래핑!

 

1. 이미지를 스크래핑해올 주소(Daum)

  https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EA%B3%A0%EC%96%91%EC%9D%B4

 

고양이 – Daum 검색

Daum 검색에서 고양이에 대한 최신정보를 찾아보세요.

search.daum.net

 

 

2. 패키지 추가 설치(beautifulsoup4)

  → beautifulsoup : 브라우저가 보고 있는 것 중에서 내가 원하는 것을 솎아내는 작업을 해준다.

  ☞ python interpreter에서 bs4를 검색하여 다운!

 

3. 크롤링 기본 세팅

from bs4 import BeautifulSoup
from selenium import webdriver
import time

driver = webdriver.Chrome('chromedriver')  #웹드라이버 파일의 경로
driver.get("https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EA%B3%A0%EC%96%91%EC%9D%B4")
time.sleep(5)  #5초 동안 페이지 로딩 기다리기

req = driver.page_source
# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(req, 'html.parser')

###################################
# 코드 작성 부분
###################################

driver.quit()  #끝나면 닫아주기

 

 

4. select / select_one 사용

# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')

# 태그 안의 텍스트를 찍고 싶을 때
soup.select('태그.text')

# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')

# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')

 

  • 이미지를 가져올 주소로 이동 → 원하는 부분에서 마우스 오른쪽 클릭! → 검사

    → 원하는 태그에서 마우스 오른쪽 클릭! → Copy → Copy selector

  • 다음과 같은 태그가 복사된다.
#첫번째 이미지
imgList > div:nth-child(1) > a > img

#두번째 이미지
imgList > div:nth-child(2) > a > img

 

→ div:nth-child(n) ⇒ 이 부분만 다르다는 것을 알 수 있음.

from bs4 import BeautifulSoup
from selenium import webdriver
import time

driver = webdriver.Chrome('chromedriver') # 웹드라이버 파일의 경로
driver.get("https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EA%B3%A0%EC%96%91%EC%9D%B4")
time.sleep(5) # 5초 동안 페이지 로딩 기다리기

req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')

thumbnails = soup.select("#imgList > div > a > img")

for thumb in thumbnails:
	src = thumb["src"]
	print(src)

driver.quit() # 끝나면 닫아주기

→ 코드를 실행하면 이미지의 url이 출력된다.

 

5. 이미지 저장하기

  • 처음에 설치했던 dload 패키지를 이용하여 이미지를 다운로드한다.
  • 이미지를 저장할 폴더를 만든다(imgs)
import dload
from bs4 import BeautifulSoup
from selenium import webdriver
import time

driver = webdriver.Chrome('chromedriver') # 웹드라이버 파일의 경로
driver.get("https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EA%B3%A0%EC%96%91%EC%9D%B4")
time.sleep(5) # 5초 동안 페이지 로딩 기다리기

req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')

thumbnails = soup.select("#imgList > div > a > img")

i=1
for thumb in thumbnails:
	src = thumb["src"]
	dload.save(src, f'imgs/{i}.jpg')  #각 이미지 파일의 이름은 1.jpg, 2.jpg... 로 한다.
	i+=1

driver.quit() # 끝나면 닫아주기

댓글