파이썬으로 레이싱걸 갤러리 긁어오기
Python :
2007. 8. 1. 20:26
반응형
프갤에서 반응보고 점차 수정할 생각인데 시험삼아 올림.
------------
아아...시험삼아 작성해보느 파이썬 강좌.
어차피, 프갤에서 노는 훃들은 엔간하면 나보다 잘할테니
파이썬을 소개하는 것을 목표로 할께.
너무 자세한건 묻지 말아줘. (몰라)
----------------
목표 : 레이싱 모델 사진 모으기 -_-*
세부사항 : 레이싱 모델 갤러리의 임이의 두 게시물 사이의 게시물들에 첨부되어 있는 모델 사진 다운받기.
알고 있어야 하는 것들 : HTML, 정규식
진행은 인터프리터를 켜놓고 따라하면 될꺼야.
우선 게시물 기본 주소를 얻어오자!
( http://gall.dcinside.com/list.php?id=racinggirl&no= )
이건 뭐..프로그래밍으로 하는게 아니니 설명 패스!
그리고 까먹기 전에 아무 변수에나 넣어두자.
알다시피 파이썬은 아무때나 변수를 만들 수 있으니까 필요할때 만들면 돼~
파이썬에서 문자열은 '나 "로 감싸면 되고 차이는 없어. 문자열이 여러줄일땐 '''나 """로 감싸면 되고. 뭐 그냥 그렇다구요~
저 주소를 어떻게 쓸꺼냐면, 주소 뒤에 게시물 번호만 바꿔서 for로 돌리는거야..
웁스, 차근차근 설명하려 했는데 단번에 너무 많은게 나와버렸네.
* for
* range
* 들여쓰기
이정도가 저거에서 볼만한 게 아닌가 싶네.
# 들여쓰기
우선 들여쓰기부터 보면, C나 자바는 함수나, for, if등 구역을 나눌 때 {}를 사용하잖아?
그런데 {}사용하면서도 사람들이 들여쓰기도 다 하잖아. 그래서 파이썬은 {}를 안쓰고 그냥 들여쓰기를
구역 구분으로 사용해.
{}가 컴퓨터를 위한거고 들여쓰기가 인간을 위한 것이었다면 파이썬은 그냥 들여쓰기만 사용해서 컴퓨터와 인간이 같은걸 보게 하는거지.
# for
파이썬에서 for문은 시퀀스 자료형 탐험용이라고 보면 될 것 같아.
그러니까...
for A in B: 라고하면 B는 시퀀스 자료형 오는거고 A는 우리가 하니씩 받을 변수가 되는거지.
아, 그리고 if, while, for등의 끝에는 :를 붙여줘.
# range
range는 주어진 숫자 사이의 리스트를 만드는 함순데.
range(10)하면 [0,1,2,3,4,5,6,7,8,9]가 되는거고
range(5, 10)하면 [5,6,7,8,9]가 되는거고, 막 이래.
# 기타
print는 화면 출력, str은 문자열로 변경.
문자열끼리 연결할때는 +로 연결해주면 되는거야~
자자. 이제 주소도 생성했으니 게시물 속 알맹이를 얻어와야지!
파이썬은 기본으로 제공되는 모듈이 참 많은데 그중에 urllib라는게 있어.
모듈을 불러오는건 두가지 방법이 있는데 그건 그냥 넘어가고.
모듈 불러오기!
>>> import urllib
모듈 불러오고 하는건 생긴게 자바랑 비슷하게 생겼더라고.
아무튼 저 모듈에 urllib.urlopen이란 함수가 있는데 url에 연결해서 파일 오브젝트를 넘겨줘..
우리가 필요한건 아까 그 for문에서 만든 주소니까 거기에 추가하면 되겠지.
>>> for no in range(170710, 170720):
>>> url = racingGirlUrl + str(no)
>>> f = urllib.urlopen(url)
파이썬이 스크립트 언어라서 좋은게, 모듈이나 클래스 등의 변수, 메소드 등이 뭐가 있나 모르겠으면
dir해보면 대충 알 수 있어. 이게 참 좋더라.
이런식으로 나올꺼야.
뭐..이름만 나오니까 메소든지 변순지는 알 수 없지만...대충 감은 오잖아?
>>> f.read() 를 하면 아까 읽어들인 페이지의 HTML이 좍~ 출력되겠지-_-
근데 이렇게 하면 for문이 끝나고 마지막에 남은 f의 내용만 본거니까 나머지도 다 보기위해 이것도 for문으로 넣자.
아무튼 게시물의 html도 읽어왔으니 이제 사진 주소를 찾아야지!
이것도 코딩으론 모르겠고. 손으로 직접-_-;
대충 html을 보니까.. http://image.dcinside.com/download.php로 시작하는걸 받으면 되겠네.
이제 정규식을 쓰자고.
파이썬 정규식 모듈은 re야.
(모듈 이름 쓰기가 얼마나 귀찮았으면 두자로 했을까. 게으른 사람들 같으니-_-;)
뭐..정규식 모듈이 해주는게 이것저것 있지만 우리가 필요한건 문자열에서 원하는 문자열만 뽑아내는거니 그것만 보자구.
(아까 말했듯, dir(re)를 해보면 re 모듈에 들어있는 클래스, 함수 등을 볼 수 있다오~)
우리가 찾는 함수는 이것! re.findall
아 근데 이 함수 인자가 어떻게돼더라...잘 모르겠을 땐
>>> help(re.findall) 해보면 대충 설명이 나오지.
내가 사용할 정규식은 http://image.dcinside.com/download.php[^']+ 이거야.
(정규식에 대한 설명은 패스.)
합쳐서 아까 그 for문에 넣어주면
이렇게 되겠다. 하하 이제 사진 주소들도 얻어왔으니 다운받아서 저장하는 것만 남았군.
파이썬 기본 자료형에 리스트라는게 있는데, 뭐 이름에서도 알 수 있듯 시퀀스 자료형이야.
리스트의 문법은 []로 감싸는거고,
[]는 빈거 [1]는 1이 있는 리스트, [1, 'bob'] 이런 1이랑 'bob'이 있는 리스트. [1, 'bob', ['gopa']] 이건 리스트 안에 리스트가 있는거.
이 얘길 갑자기 왜하냐면 방금 findall하면 넘어오는게 찾은 주소들의 리스트거든.
우리가 하려는건 받은 리스트를 순서대로 돌면서 그 주소의 사진을 urlopen으로 열어서 내 컴퓨터에 저장하는 것.
여태까지 했던거의 반복이니까 설명 없이 바로 작성할께.
이정도쯤 되겠네.
쓰면서 for문 안에껄 함수로 빼낼껄. 하는 후회를 하긴 했는데, 뒤늦게 생각난거라 고치기가 귀찮네.
완성 소스
-----------------------
-----------------
아~ 레모들 이쁘네~
간단한 것 몇가지 추가하자면,
파이썬에서 주석은 #로 시작하면 되고,
html 파싱해서 뭐 찾고 그러는거면 파이썬엔 beautifulSoap이란걸 많이 쓰더라. 편해.
----
이랬음 좋겠다 저랬음 좋겠다 글올려줘~
출처: DC프벨
------------
아아...시험삼아 작성해보느 파이썬 강좌.
어차피, 프갤에서 노는 훃들은 엔간하면 나보다 잘할테니
파이썬을 소개하는 것을 목표로 할께.
너무 자세한건 묻지 말아줘. (몰라)
----------------
목표 : 레이싱 모델 사진 모으기 -_-*
세부사항 : 레이싱 모델 갤러리의 임이의 두 게시물 사이의 게시물들에 첨부되어 있는 모델 사진 다운받기.
알고 있어야 하는 것들 : HTML, 정규식
진행은 인터프리터를 켜놓고 따라하면 될꺼야.
우선 게시물 기본 주소를 얻어오자!
( http://gall.dcinside.com/list.php?id=racinggirl&no= )
이건 뭐..프로그래밍으로 하는게 아니니 설명 패스!
그리고 까먹기 전에 아무 변수에나 넣어두자.
알다시피 파이썬은 아무때나 변수를 만들 수 있으니까 필요할때 만들면 돼~
>>> racingGirlUrl = 'http://gall.dcinside.com/list.php?id=racinggirl&no='
파이썬에서 문자열은 '나 "로 감싸면 되고 차이는 없어. 문자열이 여러줄일땐 '''나 """로 감싸면 되고. 뭐 그냥 그렇다구요~
저 주소를 어떻게 쓸꺼냐면, 주소 뒤에 게시물 번호만 바꿔서 for로 돌리는거야..
>>> for no in range(170710, 170720):
>>> print racingGirlUrl + str(no)
>>> print racingGirlUrl + str(no)
웁스, 차근차근 설명하려 했는데 단번에 너무 많은게 나와버렸네.
* for
* range
* 들여쓰기
이정도가 저거에서 볼만한 게 아닌가 싶네.
# 들여쓰기
우선 들여쓰기부터 보면, C나 자바는 함수나, for, if등 구역을 나눌 때 {}를 사용하잖아?
그런데 {}사용하면서도 사람들이 들여쓰기도 다 하잖아. 그래서 파이썬은 {}를 안쓰고 그냥 들여쓰기를
구역 구분으로 사용해.
{}가 컴퓨터를 위한거고 들여쓰기가 인간을 위한 것이었다면 파이썬은 그냥 들여쓰기만 사용해서 컴퓨터와 인간이 같은걸 보게 하는거지.
# for
파이썬에서 for문은 시퀀스 자료형 탐험용이라고 보면 될 것 같아.
그러니까...
for A in B: 라고하면 B는 시퀀스 자료형 오는거고 A는 우리가 하니씩 받을 변수가 되는거지.
아, 그리고 if, while, for등의 끝에는 :를 붙여줘.
# range
range는 주어진 숫자 사이의 리스트를 만드는 함순데.
range(10)하면 [0,1,2,3,4,5,6,7,8,9]가 되는거고
range(5, 10)하면 [5,6,7,8,9]가 되는거고, 막 이래.
# 기타
print는 화면 출력, str은 문자열로 변경.
문자열끼리 연결할때는 +로 연결해주면 되는거야~
자자. 이제 주소도 생성했으니 게시물 속 알맹이를 얻어와야지!
파이썬은 기본으로 제공되는 모듈이 참 많은데 그중에 urllib라는게 있어.
모듈을 불러오는건 두가지 방법이 있는데 그건 그냥 넘어가고.
모듈 불러오기!
>>> import urllib
모듈 불러오고 하는건 생긴게 자바랑 비슷하게 생겼더라고.
아무튼 저 모듈에 urllib.urlopen이란 함수가 있는데 url에 연결해서 파일 오브젝트를 넘겨줘..
우리가 필요한건 아까 그 for문에서 만든 주소니까 거기에 추가하면 되겠지.
>>> for no in range(170710, 170720):
>>> url = racingGirlUrl + str(no)
>>> f = urllib.urlopen(url)
파이썬이 스크립트 언어라서 좋은게, 모듈이나 클래스 등의 변수, 메소드 등이 뭐가 있나 모르겠으면
dir해보면 대충 알 수 있어. 이게 참 좋더라.
>>> dir(f) 해보면 대충
['__doc__', '__init__', '__iter__', '__module__', '__repr__', 'close','fileno', 'fp', 'geturl', 'headers', 'info', 'next', 'read','readline', 'readlines', 'url']
['__doc__', '__init__', '__iter__', '__module__', '__repr__', 'close','fileno', 'fp', 'geturl', 'headers', 'info', 'next', 'read','readline', 'readlines', 'url']
이런식으로 나올꺼야.
뭐..이름만 나오니까 메소든지 변순지는 알 수 없지만...대충 감은 오잖아?
>>> f.read() 를 하면 아까 읽어들인 페이지의 HTML이 좍~ 출력되겠지-_-
근데 이렇게 하면 for문이 끝나고 마지막에 남은 f의 내용만 본거니까 나머지도 다 보기위해 이것도 for문으로 넣자.
>>> for no in range(170710, 170720):
>>> url = racingGirlUrl + str(no)
>>> f = urllib.urlopen(url)
>>> html = f.read()
>>> url = racingGirlUrl + str(no)
>>> f = urllib.urlopen(url)
>>> html = f.read()
아무튼 게시물의 html도 읽어왔으니 이제 사진 주소를 찾아야지!
이것도 코딩으론 모르겠고. 손으로 직접-_-;
대충 html을 보니까.. http://image.dcinside.com/download.php로 시작하는걸 받으면 되겠네.
이제 정규식을 쓰자고.
파이썬 정규식 모듈은 re야.
(모듈 이름 쓰기가 얼마나 귀찮았으면 두자로 했을까. 게으른 사람들 같으니-_-;)
>>> import re
뭐..정규식 모듈이 해주는게 이것저것 있지만 우리가 필요한건 문자열에서 원하는 문자열만 뽑아내는거니 그것만 보자구.
(아까 말했듯, dir(re)를 해보면 re 모듈에 들어있는 클래스, 함수 등을 볼 수 있다오~)
우리가 찾는 함수는 이것! re.findall
아 근데 이 함수 인자가 어떻게돼더라...잘 모르겠을 땐
>>> help(re.findall) 해보면 대충 설명이 나오지.
내가 사용할 정규식은 http://image.dcinside.com/download.php[^']+ 이거야.
(정규식에 대한 설명은 패스.)
합쳐서 아까 그 for문에 넣어주면
>>> for no in range(170710, 170720):
>>> url = racingGirlUrl + str(no)
>>> f = urllib.urlopen(url)
>>> html = f.read()
>>> imageUrlList = re.findall("http://image.dcinside.com/download.php[^']+", html)
>>> url = racingGirlUrl + str(no)
>>> f = urllib.urlopen(url)
>>> html = f.read()
>>> imageUrlList = re.findall("http://image.dcinside.com/download.php[^']+", html)
이렇게 되겠다. 하하 이제 사진 주소들도 얻어왔으니 다운받아서 저장하는 것만 남았군.
파이썬 기본 자료형에 리스트라는게 있는데, 뭐 이름에서도 알 수 있듯 시퀀스 자료형이야.
리스트의 문법은 []로 감싸는거고,
[]는 빈거 [1]는 1이 있는 리스트, [1, 'bob'] 이런 1이랑 'bob'이 있는 리스트. [1, 'bob', ['gopa']] 이건 리스트 안에 리스트가 있는거.
이 얘길 갑자기 왜하냐면 방금 findall하면 넘어오는게 찾은 주소들의 리스트거든.
우리가 하려는건 받은 리스트를 순서대로 돌면서 그 주소의 사진을 urlopen으로 열어서 내 컴퓨터에 저장하는 것.
여태까지 했던거의 반복이니까 설명 없이 바로 작성할께.
>>> fileNo = 0
>>> for no in range(170710, 170720):
>>> url = racingGirlUrl + str(no)
>>> f = urllib.urlopen(url)
>>> html = f.read()
>>> imageUrlList = re.findall("http://image.dcinside.com/download.php[^']+", html)
>>> for url in imageUrlList:
>>> contents = urllib.urlopen(url).read()
>>> file(str(fileNo)+'.jpg', 'w').write(contents)
>>> fileNo = fileNo + 1
>>> for no in range(170710, 170720):
>>> url = racingGirlUrl + str(no)
>>> f = urllib.urlopen(url)
>>> html = f.read()
>>> imageUrlList = re.findall("http://image.dcinside.com/download.php[^']+", html)
>>> for url in imageUrlList:
>>> contents = urllib.urlopen(url).read()
>>> file(str(fileNo)+'.jpg', 'w').write(contents)
>>> fileNo = fileNo + 1
이정도쯤 되겠네.
쓰면서 for문 안에껄 함수로 빼낼껄. 하는 후회를 하긴 했는데, 뒤늦게 생각난거라 고치기가 귀찮네.
완성 소스
-----------------------
import re
import urllib
fileNo = 0
racingGirlUrl = 'http://gall.dcinside.com/list.php?id=racinggirl&no='
for no in range(170710, 170720):
url = racingGirlUrl + str(no)
f = urllib.urlopen(url)
html = f.read()
imageUrlList = re.findall("http://image.dcinside.com/download.php[^']+", html)
print imageUrlList
for url in imageUrlList:
print fileNo
contents = urllib.urlopen(url).read()
file(str(fileNo)+'.jpg', 'w').write(contents)
fileNo = fileNo + 1
import urllib
fileNo = 0
racingGirlUrl = 'http://gall.dcinside.com/list.php?id=racinggirl&no='
for no in range(170710, 170720):
url = racingGirlUrl + str(no)
f = urllib.urlopen(url)
html = f.read()
imageUrlList = re.findall("http://image.dcinside.com/download.php[^']+", html)
print imageUrlList
for url in imageUrlList:
print fileNo
contents = urllib.urlopen(url).read()
file(str(fileNo)+'.jpg', 'w').write(contents)
fileNo = fileNo + 1
-----------------
아~ 레모들 이쁘네~
간단한 것 몇가지 추가하자면,
파이썬에서 주석은 #로 시작하면 되고,
html 파싱해서 뭐 찾고 그러는거면 파이썬엔 beautifulSoap이란걸 많이 쓰더라. 편해.
----
이랬음 좋겠다 저랬음 좋겠다 글올려줘~
출처: DC프벨
반응형
'Python' 카테고리의 다른 글
python 연습 (0) | 2007.08.02 |
---|---|
py2exe (0) | 2007.07.09 |
IRonPython 1.0 릴리즈 (0) | 2007.06.16 |