힌트 이미지가 지퍼인 거 보면 압축파일 zip이 생각날 거예요
html 열어보면
zip 이래요.
아래 주석은 대충 도네 쏴주면 감사하겠단 뜻
channel.zip으로 수정해봅시다.
zip 파일이 다운 받아집니다.
열어보면 엄청 많은 텍스트 파일이 압축돼있고 설명란에 의미불명의 문자들이 적혀있습니다.
readme.txt를 열어보면
힌트 :: 1. 90052에서 시작
2. 답은 zip파일 안에 ::
90052.txt부터 열어볼게요.
이전 포스트에서 간단히 웹 크롤링해서 마지막 페이지까지 넘어가 봤어요.
그때처럼 똑같이 하면 될 것 같아요.
import re
pattern = re.compile("[0-9]+")
nothing = "90052"
while True:
try:
f = open(nothing+".txt")
data = f.read()
print(data)
nothing = re.findall(pattern, data)[0]
except:
f.close()
break
코드 블록 손 좀 보고 싶은데 귀찮아요.
re는 뭐다? 정규표현식을 지원하기 위한 모듈이다. 이걸 알아야 써먹을 수 있겠죠.
zip파일 속 txt 파일을 열어서 크롤링해야 할 거 같은데
뭣도 모르고 그냥 압축 풀어서 크롤링했어요.
다른 방법으로 풀 수도 있을 겁니다.
파일을 열 때는 open() 함수를 쓰고,
read() 함수는 파일의 모든 내용을 문자열로 반환시켜주는 역할을 합니다.
일단 try하고 오류가 나면 except로 while문을 break 합니다. (예외 처리)
저번처럼 숫자 패턴으로 컴파일해서 맞는 파일을 따라서 추적해봅시다.
46145.txt에서 멈췄네요.
comments가 뭐냐
channel.zip 압축파일을 열었을 때
txt 파일 하나하나의 설명 탭에 문자들이 있었어요.
이걸 텍스트 파일을 추적하면서 모아보면 뭐가 나올 것 같네요.
import re
import zipfile
pattern = re.compile("[0-9]+")
myzipfile = zipfile.ZipFile('channel.zip','r')
nothing = "90052"
result = ''
while True:
try:
f = open(nothing+".txt")
data = f.read()
result = result + myzipfile.getinfo(nothing+".txt").comment.decode('utf-8')
nothing = re.findall(pattern, data)[0]
except:
print(result)
f.close()
break
zipfile은 기본 모듈로 zip 파일을 다룰 수 있게 하는 모듈입니다.
압축하기, 압축 풀기 따위를 할 수 있구요.
zipfile 모듈로 할 것은 zip 파일을 읽어와서 comment를 뽑아내는 것.
zipfile.ZipFile('파일명','r') 함수는 zip파일을 불러와서 'r' 읽는 겁니다.
result 변수에는 빈 문자열을 만들어서 추출한 comment를 저장해봅시다.
getinfo('파일명').comment를 사용하면 파일에 대한 정보에서 comment가 추출 됩니다.
저번에 대충 작성해서 실행했을 때 comment가 바이트 문자열로 출력되서 난항을 겪고 있었는데
decode() 함수를 사용하니 올바르게 출력이 되더라구요.
HOCKEY (하키)가 보이네요..
hockey.html로 갑시다.
공기에 있는 것...
출력된 comment 문자들을 다시 보면..
OXYGEN
oxygen.html로 갑시다.
갈수록 난이도가 한층씩 올라가는게 느껴지네요.
포스팅 속도가 점점 느려지고 있어요. 8ㅅ8
'Security & Hacking > pythonchallenge.com' 카테고리의 다른 글
python challenge 8 (0) | 2019.07.29 |
---|---|
python challenge 7 (0) | 2019.07.28 |
python challenge 5 (0) | 2019.07.13 |
python challenge 4 (0) | 2019.07.13 |
python challenge 3 (0) | 2019.07.12 |