http://jangc.tistory.com/17
장모님 블로그를 보고 공부한것을 새로이 포스팅한 글입니다.
변수로 racingGirlUrl에 dcinside의 url주소를 가져 옵니다.
파이썬에서는 ' 와 "의 묶음은 차이가 없습니다.
>>> print racingGirlUrl + str(no)
그 뒤에 for문을 이용해서 racinggirl&no=뒤에 넣을 숫자들을 돌립니다.
그리고 print racingGrilUrl을 해주게 되면 결과값으로
http://gall.dcinside.com/list.php?id=racinggirl&no=222543
http://gall.dcinside.com/list.php?id=racinggirl&no=222544
http://gall.dcinside.com/list.php?id=racinggirl&no=222545
http://gall.dcinside.com/list.php?id=racinggirl&no=222546
http://gall.dcinside.com/list.php?id=racinggirl&no=222547
http://gall.dcinside.com/list.php?id=racinggirl&no=222548
이런식으로 쭉 뜨게 됩니다.
이 값을 url이라는 변수에 넣어 주도록 합니다.
>>> f = urllib.urlopen(url)
url이라는 변수에는 갤러리의 주소값이 들어가고, 그 주소값을 urllib.urlopen()이라는 함수를 써서 f라는 변수에 넣습니다.
urllib의 모듈은 웹상의 문서나 파일을 가져올 수 있는 모듈입니다. url이나 header등의 정보들을 가져 올 수 있습니다.
사용법은 아래와 같습니다.
print f.headers
print f.url
>>> imageUrlList = re.findall("http://image.dcinside.com/download.php[^']+", html)
저런식으로 변수에 넣어서, f.read()등으로 쓰이게 됩니다. url의 값을 읽은뒤 f.read로 소스값을 html이란 변수로 넣습니다.
print html을 하게 되면 페이지의 소스값이 출력되게 됩니다.
그 출력된 값을 re.findall 이라는 모듈을 사용하여서 또 다른 변수 imageUrlList에 넣습니다.
findall 이란, 첫번째 값과 두번째 값을 비교하는 모듈 입니다. 정규표현식을 써서 download.php뒤 에 있는 [^'] 이 부분과
html에(소스값들이 들어가있는)을 비교해서 같은부분을 찾는 것 입니다.
즉 html 안에 있는 download.php---블라블라 하는것들이(즉 .jpg파일) 걸러지게 되어서 imageUrlList에 들어가게 됩니다.
이렇게 넣은 imageUrlList가지고 또 하나의 for문을 돌립니다.
파일값을 가지고 왔으니 이것을 jpg로 변환시켜서 저장시키면 될 것 같습니다.
print fileNo
contents = urllib.urlopen(url).read()
file(str(fileNo)+'.jpg', 'wb').write(contents)
fileNo = fileNo + 1
imageUrlList로 받은 검색된 값을, url 만큼 돌려서 그것들을 0.jpg부터 해서 저장 하는 부분 입니다.
그렇게 되면 url에는 imageUrlList에서 뽑은 리스트의 값들이 각각 들어가게 되고 그것으로 file을 생성 할 수 있습니다.
추가적으로 ("http://image.dcinside.com/download.php) 이 주소가 아닌
("http://dcimg1.dcinside.com/viewimage.php 이 주소로 바뀐 것 같습니다.
원래 주소로 다운 받으려고 하면은, 빈 페이지가 나오고 저 페이지로 가야 정상적으로 다운이 됩니다.
완성 소스 입니다.
#!/usr/bin/python import urllib import re import urllib2 fileNo = 0 racingGirlUrl = 'http://gall.dcinside.com/list.php?id=racinggirl&no=' for no in range(222548, 222550): url = racingGirlUrl + str(no) html = urllib.urlopen(url).read() imageUrlList = re.findall("http://dcimg1.dcinside.com/viewimage.php[^']+", html) # print imageUrlList for url in imageUrlList: # print fileNo print url contents = urllib.urlopen(url).read() #소스값을 가지고 옴 file(str(fileNo)+'.jpg', 'wb').write(contents) fileNo = fileNo + 1 |
'CAT-Security > 미분류' 카테고리의 다른 글
Callback(콜백 함수) 정리 (0) | 2013.01.17 |
---|---|
Code injection (1) - Basic (2) | 2013.01.02 |
python 공부 자료 (0) | 2012.12.20 |
kernel object 와 handle 정리 (2) | 2012.11.29 |
[시스템 기초] 스터디(3주차) (0) | 2012.11.27 |