아이디어를 얻기 위해서 매일 생각나는 키워드로 검색을 합니다. 검색 후 나오는 이미지를 저장하는 방법이 없나 고민을 하는데 '웹크롤링'이라는 방법이 생각나더군요. 하지만 저는 파이썬에 대해 1도 모르고 해서 ChatGPT(챗지피티)를 활용해서 만들어 보기로 했습니다.
웹클롤링이란?
웹사이트를 방문하고 웹페이지의 콘텐츠를 수집하는 프로세스입니다. 웹크롤링을 할 때 필요한 도구는 여러 가지가 있는데 대표적으로 Phthon(파이썬), Java(자바), Perl 입니다. 웹크롤링을 할 때는 다음을 주의해야 합니다.
웹 사이트의 트래픽을 방해하지 않는다! 웹 서버에 나무 많은 요청을 보내지 않도록 주의해야 합니다. 저작권이 있다! 크롤링한 데이터는 모두 저작권이 있다고 생각하세요. 데이타 사용 시에는 저작권자의 허가를 받아야 합니다.
챗지피티와 함께 만들 파이썬은
- 구글에 키워드를 입력하면 해당 키워드로 폴더가 만들어집니다.
- 해당 키워드로 원하는 이미지 개수만큼 파일이 만들어집니다.
- 진행하기 쉽게 GUI(Graphical User Interface)로 만들어집니다.
ChatGPT(챗지피티) 웹크롤링 작성 프롬프트
파이썬에 대해 1도 모르기 때문에 그냥 궁금한 질문을 바로 했어요.
"특정 검색어를 입력하면 사진을 저장하는 크롤링 소스 만들어줘"
import requests
from bs4 import BeautifulSoup
import urllib
def save_images(search_term, num_images):
# 검색어로 이미지 검색
url = f"https://www.google.com/search?q={search_term}&tbm=isch"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
# 이미지 URL 추출
image_elements = soup.find_all("img", limit=num_images)
image_urls = [element["src"] for element in image_elements]
# 이미지 다운로드
for i, url in enumerate(image_urls):
try:
response = requests.get(url, stream=True)
response.raise_for_status()
# 이미지 파일 저장
with open(f"{search_term}_{i+1}.jpg", "wb") as file:
for chunk in response.iter_content(chunk_size=8192):
file.write(chunk)
print(f"이미지 {i+1}/{num_images} 다운로드 완료.")
except Exception as e:
print(f"이미지 다운로드 실패: {e}")
if i+1 >= num_images:
break
search_term = input("검색어를 입력하세요: ")
num_images = int(input("다운로드할 이미지 수를 입력하세요: "))
save_images(search_term, num_images)
해당 코드는 requests, bs4 (BeautifulSoup), urllib 라이브러리를 사용합니다. 진행하면서 알았지만, 파이썬은 라이브러리를 설치해야 정상적으로 동작합니다. 설치 방법은 VS Code에서 'pip install [라이브러리 이름]'을 실행해 주면 됩니다. VS Code 설치 방법을 아래 게시글 확인하시면 됩니다.
2023.05.17 - 비주얼 스튜디오 코드(VS Code) 설치 및 기본 설정
비주얼 스튜디오 코드(VS Code) 설치 및 기본 설정
문서를 작성할 때 notepad 보다는 워드 또는 한글 프로그램으로 다양한 기능을 제공하는 프로그램으로 작성하는 것이 좋습니다. Code를 작성할 때는 역시 전문적인 비주얼 스튜디오 코드를 이용해
ahjung.tistory.com
ChatGPT(챗지피티) 웹크롤링 실제 저장 폴더 만들기
처음 프롬프트 실행 후 코드를 바로 실행해 봤습니다. 아무 수정도 하지 않았는데 크롤링이 됩니다. 소스코드 실행한 폴더에 이미지가 저장됩니다. '와~ 이게 되네!'
욕심을 더 내서 키워드 폴더를 만들고, 해당 폴더에 이미지를 넣어주는 코드를 작성해 봤습니다. 아니죠! 만들어 달라고 했습니다.
특정 검색어로 폴더를 생성하고 해당 폴더에 이미지를 저장하는 코드에 GUI 창을 이동할 수 있는 코드도 같이 넣어줘
import os
import requests
from bs4 import BeautifulSoup
import urllib
import tkinter as tk
from tkinter import ttk
처음 진행한 소스보다 라이브러리가 많아졌어요. os, requests, BeautifulSup, urllib, tkinter 라이브러리입니다. 파이썬의 장점 중에 하나가 GUI 구성을 라이브러리 추가로 바로 설정할 수 있다는 겁니다.
GUI로 구성된 이미지 다운로더의 모든 소스를 아래 텍스트 파일에 넣었습니다. VS Code에 붙여넣기 해서 테스트하시면 됩니다. 실행창을 마우스로 드래그해서 옮길 수 있는 코드가 함께 들어있어요.
'아이폰15' 검색으로 다운로드할 이미지 수는 '10'을 입력해서 '이미지 다운로드' 해보겠습니다. 그런데 항상 첫번째 파일은 실패가 뜹니다. 그래도 나머지 파일은 잘 들어옵니다. '아이폰15'로 다운로드된 이미지 파일이 해당 폴더로 저장되어 있습니다.
ChatGPT(챗지피티)와 소스 코드 에러 고치기
이미지 다운로드 소스를 실행하면 모두 한 번에 에러 없이 진행되지는 않습니다. 사용자 환경에 맞게 조금 손을 봐야 하는데 VS code에 나오는 에러 코드를 이용해서 챗지피티로 수정해 봤습니다.
소스를 넣고 실행을 했을 때 '문제' 탭에 숫자가 뜨게 됩니다.
챗지피티에 "messagebox"가 정의되지 않았다고 말하고 소스코드를 다시 받도록 해보겠습니다.
messagebox가 정의되지 않았다고 하는데
죄송합니다. messagebox를 사용하기 위해서는 tkinter.messagebox 모듈을 import해야 합니다. 아래의 수정된 코드에서 messagebox 모듈을 import하고 사용하도록 수정하였습니다.
messagebox 모듈을 import 하는 소스와 설명도 같이 제공해 줍니다.
마무리
ChatGPT(챗지피티)와 함께 파이썬을 이용해서 구글 이미지 검색을 해서 폴더를 만들고 파일을 저장하는 코드를 만들어 봤는데요. 파이썬 1도 모르는 사람이 검색으로만 실제 구동되는 완성형 프로그램을 만들 수 있었다는 게 정말 신기했습니다. 해당 코드를 중심으로 기본적인 파이썬 라이브러리와 문법을 공부한다면 다양한 응용프로그램도 만들 수 있다는 자신감이 생기네요.
'IT' 카테고리의 다른 글
WWDC 2023 애플 새기기 출시 Vision Pro 비전 프로 디지털 혁명 (0) | 2023.06.06 |
---|---|
애드센스 무효 클릭과 무효 트래픽 생긴 초짜 이야기 (2) | 2023.06.02 |
티스토리 쿠팡 파트너스 사이드바에 고정(플로팅) 하기 (4) | 2023.05.28 |
오디세이(Odyssey) 스킨 본문 가로 크기 수정하기 CSS 편집 (0) | 2023.05.28 |
로또 당첨번호 첫회부터 현재까지 엑셀로 다운받기 피벗테이블 (0) | 2023.05.24 |