요즘 포켓몬 유나이트를 너무너무 재밌게 하고 있어서
그거와 관련된 조그만 프로젝트를 하면 좋을 것 같아서 고민중에 있다.
일단 오늘은 포켓몬 유나이트의 참전 포켓몬을 크롤링해서 이미지들을 다운받는거 부터 시작하려고 한다.
크롤링(crawling) 혹은 스크레이핑(scraping)은 웹 페이지를 그대로 가져와서 거기서 데이터를 추출해 내는 행위다.
소스는 python 으로 되어있고, 패키지는 파이썬에서 웹 브라우저 상호작용을 자동화하는 selenium 을 사용했다.
일단 본인의 크롬버전을 확인하고
그 크롬버전에 맞는 크롬드라이버를 다운받아줘야한다.
크롬 버전 확인방법은 오른쪽상단에 세개의 점 아이콘을 클릭 후, 도움말에서 chrome정보 보기를 클릭하면 확인이 가능하다.
크롬드라이버는 https://chromedriver.chromium.org/downloads 여기서 다운이 가능하다.
본인의 버전에 맞게 설치하면 된다.
1
2
3
4
5
6
7
8
9
10
|
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import urllib.request
import os
# 크롬 연결
driver = webdriver.Chrome(executable_path='본인이 다운받은 /chromedriver')
driver.get("https://www.google.co.kr/imghp?hl=ko")
|
cs |
다운받은 크롬드라이버의 위치로 크롬을 연결시켜주고
find 에는 다운받을 포켓몬을 list 로 만든다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 가져올 포켓몬 정하기
find = ['이상해꽃', '리자몽', '피카츄', '알로라', '나인테일', '푸크린', '괴력몬', '야도란', '팬텀', '마임맨', '잠만보', '앱솔', '한카리아스', '루카리오', '암팰리스', '개굴닌자','파이어로', '에이스본', '백솜모카', '윽우지']
for key in find:
# print(key)
# 이미지 찾기
elem = driver.find_element_by_name("q")
# 기존 입력값 초기화 함수 실행
clear_text(elem)
# find에 넣어논 포켓몬 리스트를 검색어로 넣는다.
elem.send_keys(key)
# 엔터키 입력
elem.send_keys(Keys.RETURN)
|
cs |
1
2
3
4
5
|
def clear_text(element):
# 검색어 길이를 찾고, 그 길이만큼 백스페이스를 날려준다.
length = len(element.get_attribute('value'))
element.send_keys(length * Keys.BACKSPACE)
|
cs |
중간에 한번 for문을 돌고 나서, 기존의 검색어가 아직 남아있기 때문에
그 검색어를 지워주기 위해서 clear_text 함수를 만들었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# 이미지가 없을 때 까지 스크롤 끝까지 내려가는 법
# 스크롤 할때 잠깐 시간적 여유주기
SCROLL_PAUSE_TIME = 1.0
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
# Scroll down to bottom
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Wait to load page
time.sleep(SCROLL_PAUSE_TIME)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
try:
#css 에서 다음페이지에 해당하는 id를 클릭해준다.
driver.find_element_by_css_selector(".mye4qd").click()
except:
break
last_height = new_height
# 이미지가 없을 때 까지 스크롤 끝까지 내려가는 법
# 다운받는 부분
images = driver.find_elements_by_css_selector(".rg_i.Q4LuWd")
count = 1
for image in images:
# 가져올 갯수 정하기
if count < 40:
try:
image.click()
time.sleep(2)
imgURL = driver.find_element_by_xpath("/html/body/div[2]/c-wiz/div[3]/div[2]/div[3]/div/div/div[3]/div[2]/c-wiz/div/div[1]/div[1]/div[2]/div[1]/a/img").get_attribute("src")
path = "./images/"+key
# 폴더가 없으면 생성하기
if not os.path.isdir(path):
os.mkdir(path)
# 생성한 폴더에 이미지 저장하기
urllib.request.urlretrieve(imgURL, "images/"+key+"/"+key+str(count) + ".jpg")
count = count + 1
except:
pass
driver.close
|
cs |
나머지 코드는 별거 없고,
이미지를 클릭한다음, 그 이미지를 다운받는다.
다운받은 이미지는 각각의 이름으로 폴더를 만들고
그 폴더에 count 를 해서 파일이름으로 저장해준다.
내일은 요 이미지들을 가지고 teachable machine 에 적용시켜 모델을 학습해볼거다.
'IT Diary > # Dev Diary' 카테고리의 다른 글
Mac OS 에서 LaunchAgents 사용해보기 (0) | 2023.09.10 |
---|---|
[ Dev Dairy ] 006. 연관어 네트웍크 분석 Networkx 사용해보기 (0) | 2021.07.28 |
[ Dev Dairy ] 005. krwordrank 사용해보기 (0) | 2021.07.28 |
[ Dev Dairy ] 004. Flask API 만들어보기 (0) | 2021.07.20 |
[ Dev Dairy ] 003. Teachable Machine 사용해보기 (0) | 2021.03.26 |