728x90
반응형
포켓몬고 사이트에서 포켓몬 이름을 제목으로 한 포켓몬 png 파일 크롤링해오기.
내 풀이
import requests
from bs4 import BeautifulSoup
soup = BeautifulSoup(res.text, "html.parser")
for i in soup.select("li>a")[328:1040]:
이름=i.select_one(".pokemonname").text
경로="https:"+i.select_one("img").get("src")
# print(이름.text)
# print(경로)
r=requests.get(경로)
f=open(f"포켓몬/{이름}.png","wb")
f.write(r.content)
-----------------------------------------------------------------------------------------------------------------------------
T풀이
import requests
from bs4 import BeautifulSoup
import os
if os.path.isdir("포켓몬"):
pass
else:
os.mkdir("포켓몬")
soup = BeautifulSoup(res.text, "html.parser")
for i in soup.select(".pokemonicon") :
이름 = i.select_one("span").text
링크 = 'https:' + i.select_one("img").get("src").replace("pokemonicon", "pokemonimage")
r = requests.get(링크)
f = open(f"포켓몬/{이름}.png", "wb")
f.write(r.content)
-----------------------------------------------------------------------------------------------------------------------------
# 실습
import os
#os.listdir(x)
# x 하위의 파일, 폴더 이름들을 리스트로 반환
# x 의 default 값은 현재경로
li=os.listdir("실습")
# print(li)
# 1. 실습 아래의 파일, 각각의 글자수 출력
for i in li:
f=open(f"실습/{i}","r",encoding="utf-8")
print(f"{i}파일의 글자수>{len(f.read())}")
# 2. 현재 경로에 파일의 개수 폴더의 개수 출력하기
# os.path.isdir(x) x라는 폴더가 존재하면, x가 폴더이면 True, 아니면 False
# os.path.isfile(x) x라는 파일이 존재하면, x가 파일이면 True 아니면 False
import os
li=os.listdir()
fol,pil=0,0
for i in li:
if os.path.isdir(i):
fol+=1
elif os.path.isfile(i):
pil+=1
print(fol)
print(pil)
# 3. 퇴근 3시간전 여기있는 파일들의 이름을 바꿔야 한다.
# 파일번호_파일이름.py > [kgit]파일번호(2022)_파일이름.py
# 001_print.py > [kgit]001(2022)_print.py
# 002_주석.py > [kgit]002(2022)_주석.py
# ......
# os.rename(A,B)
# A, B : 상대경로를 포함한 파일이름
import os
for i in os.listdir("실습"):
바꿀이름=(f"[kgit]{i[:3]}(2022){i[3:]}")
# print(바꿀이름)
os.rename(f"실습/{i}",f"실습/{바꿀이름}")
# 4. 포켓몬 폴더의 파일 형식을 다음과 같이 바꿔주시면 됩니다.
# ===============================================
# 1.이상해씨 .png > 001_이상해씨.png
# 2.이상해풀 .png > 002_이상해풀.png
# ...
# ===============================================
# 이 때 새로운 표현이 필요합니다
# 문자열메서드 zfill 인데요. 일명 zerofill 이라고도 불러요
# idle 를 켜주시고 다음의 세 명령어를 입력해보시면 이해되실거에요
# "1".zfill(3)
# "12".zfill(3)
# "123".zfill(3)
# 그리고 자세히보시면 포켓몬이름 뒤에 공백이 있는데 그것도 제거해주세요~
import os
print(os.listdir("포켓몬"))
for i in os.listdir("포켓몬"):
A=i.split(".")
B=f"{A[0].zfill(3)}_{A[1].strip()}.png"
os.rename(f"포켓몬/{i}",f"포켓몬/{B}")
# 5. pillow
from PIL import Image
img=Image.open("포켓몬/001_이상해씨.png")
img=img.resize((500,500)) # 튜플 값이 들어감
img.show() # 이미지계의 print
img.save("거다이맥스이상해씨.png")
print(img.size) # 가로세로 픽셀수
print(img.mode) # 색상모드
# 6. 포켓몬 500이라는 폴더에 모든 포켓몬 사진을 500x500으로 확대해서 저장하세요.
from PIL import Image
import os
li=os.listdir("포켓몬")
for i in li:
img=Image.open(f"포켓몬/{i}")
img=img.resize((500,500))
img.save(f"포켓몬500/{i}")
# 7. pillow 검정색으로 칠해버리기 ~
from PIL import Image
img=Image.open("포켓몬500/001_이상해씨.png")
print(img.getpixel((0,0))) # 안에 튜플값! 0,0 의 색상정보를 반환
# (0,0,0,0)
# red green blue a(투명도)
# 0,0,0 검은색 0 투명 255 선명
# 0,0,0,255 검은색 0,0,0,0 투명색
print(img.getpixel((250,250)))
# 500이면 499까지만 가능, 그리고 왼쪽 위 모서리가 0,0
img.putpixel((0,0),(0,0,0,255)) # 두 개의 튜플 (좌표,색) 0,0에 검은색 칠함
img.putpixel((0,1),(0,0,0,255))
img.putpixel((0,2),(0,0,0,255))
img.putpixel((0,3),(0,0,0,255))
img.putpixel((0,4),(0,0,0,255))
img.putpixel((0,5),(0,0,0,255))
img.putpixel((0,6),(0,0,0,255))
img.putpixel((0,7),(0,0,0,255))
img.putpixel((0,8),(0,0,0,255))
img.putpixel((0,9),(0,0,0,255))
img.show()
# 색상값 정보를 추출한다
# 색상값이 존재하는 모든 색을 검정색으로 바꾼다
from PIL import Image
img=Image.open("포켓몬500/001_이상해씨.png")
for i in range(0,500):
for j in range(0,500):
rgba=img.getpixel((i,j))
if rgba[3]>30:
img.putpixel((i,j),(0,0,0,255))
img.show()
# 8. 포켓몬 500에있던 친구들 전부 "포켓몬그림자"에 뭘까요 상태로 저장
from PIL import Image
import os
li=os.listdir("포켓몬500")
for k in li:
img=Image.open(f"포켓몬500/{k}")
for i in range(0,500):
for j in range(0,500):
rgba=img.getpixel((i,j))
if rgba[3]>30:
img.putpixel((i,j),(0,0,0,255))
img.save(f"포켓몬그림자/{k}")
# 포켓몬 맞추기 게임
import os
from random import randint as ri
from PIL import ImageTk
import tkinter as tk
from tkinter import messagebox
window = tk.Tk()
window.geometry("500x900")
window.title("뭘까요?")
window.resizable(False, False)
score = 0
life = 5
포켓몬목록 = os.listdir("포켓몬그림자")
la = tk.Label(window)
la.pack()
lalife = tk.Label(window, font=("맑은고딕", 30, "bold"), fg="red")
lalife.pack()
보기인덱스 = set()
def 문제출제():
global 정답인덱스, 보기인덱스
정답인덱스 = ri(0, len(포켓몬목록)-1)
img = ImageTk.PhotoImage(file=f"포켓몬그림자/{포켓몬목록[정답인덱스]}")
la["image"] = img
la.image = img
보기인덱스 = set()
보기인덱스.add(정답인덱스)
while True:
보기인덱스.add(ri(0, len(포켓몬목록)-1))
if len(보기인덱스) == 5:
break
보기인덱스 = list(보기인덱스)
for i in range(5):
button[i]["text"] = 포켓몬목록[보기인덱스[i]].split(".")[0].split("_")[1].strip()
lalife["text"] = "♥ "*life + "♡ "* (5-life)
def 채점(idx):
global 정답인덱스, 보기인덱스, score, life
if 보기인덱스[idx] == 정답인덱스:
score += 100
img = ImageTk.PhotoImage(file=f"포켓몬500/{포켓몬목록[정답인덱스]}")
la["image"] = img
la.image = img
messagebox.showinfo("CORRECT!!", "정답입니다.")
문제출제()
else:
life -= 1
if life == 0:
messagebox.showinfo("GAME OVER", f"당신의 점수는 {score} 입니다.")
exit()
lalife["text"] = "♥ "*life + "♡ "* (5-life)
button = [None]*5
for i in range(5):
button[i] = tk.Button(window, command=lambda x=i:채점(x), width=20, font=("맑은고딕", 20, "bold"), fg="blue")
button[i].pack()
문제출제()
window.mainloop()
728x90
반응형
'IT&코딩 > python' 카테고리의 다른 글
python - 함수의 간결성을 이용한 프로그램 (0) | 2022.09.13 |
---|---|
python - 함수 심화 (0) | 2022.09.13 |
python 4주차 복습-3 (0) | 2022.07.31 |
python 4주차 복습-3 (0) | 2022.07.29 |
python 4주차 복습-2 (0) | 2022.07.29 |