728x90
[01] https://xkcd.com 이미지 다운받기
1. Rquests 패키지 설치하기
C:\Users\soldesk>pip install requests
Collecting requests
Downloading requests-2.13.0-py2.py3-none-any.whl (584kB)
100% ■■■■■■■■■ 593kB 1.2MB/s
Installing collected packages: requests
Successfully installed requests-2.13.0
1. 이미지 다운로드
[실행 화면]
▷ crawler1.xkcd.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import requests, os, bs4
# http://xkcd.com/# 으로 끝나면 마지막 페이지임을 나타냄.
url = 'http://xkcd.com' # starting url
# makedirs: 상위 경로도 함께 생성
# exist_ok=True: 폴더가 있으면 다시 만들지 않고 에러 발생 안됨.
# 선언을 생략하면 기존에 폴더가 있는 경우 에러가 발생됨.
os.makedirs('xkcd', exist_ok=True) # store comics in ./xkcd
max_download = 0
while not url.endswith('#'): # url '#'으로 끝나지 않을 동안 순환
max_download +=1
if max_download >= 11:
break # 10장의 이미지 다운로드 후 while 종료
# Download the page.
print('Downloading page %s' %url)
res = requests.get(url)
res.raise_for_status() # 200 OK 코드가 아닌 경우 에러 발생
# res.text: 내용 추출
bs = bs4.BeautifulSoup(res.text, 'lxml', from_encoding='utf-8')
# Find the url of the comic image.
# <div id="comic">
# <img src="//imgs.xkcd.com/comics/geochronology.png"
# title="'The mountains near here formed when the ... Newfoundland ...
# microplate collided with, uhh ... Labrador.' 'Ok, now you're definitely just naming dogs.'
#'Wait, no, that's actually almost correct.'"
# alt="Geochronology" srcset="//imgs.xkcd.com/comics/geochronology_2x.png 2x">
comicElem = bs.select('#comic img')
if comicElem == []: # list가 비었는경우, 태그가 없다면
print('태그가 발견되지 않았습니다.')
else:
# comicElem[0]: 첫번째 list 요소인 img 태그의 src 속성을 찾아
comicURL = comicElem[0].get('src').strip('//') # // 없앰
# Download the image.
print('Downloading images %s... ' %(comicURL))
res = requests.get('http://' + comicURL)
res.raise_for_status()
# ./xkcd 폴더에 이미지 저장
# os.path.basename(comicURL): 순수 이미지명만 추출
# os.path.join('xkcd', 파일명): /xkcd/파일명의 형태로 조합
imageFile = open(os.path.join('xkcd', os.path.basename(comicURL)), 'wb')
for chunk in res.iter_content(100000): # 100,000 바이트씩 기록
imageFile.write(chunk) # 파일 기록
imageFile.close() # 파일 닫기
# 이전 주소로 이동
# <a rel="prev" href="/1828/" accesskey="p">Prev</a>
prevLink = bs.select('a[rel="prev"]')[0]
# href 속성의 값 --> http://xkcd.com/1828 산출
url = 'http://xkcd.com' + prevLink.get('href')
print('실행 종료')
-------------------------------------------------------------------------------------
[실습] 자신의 다음 블로그 article에서 이미지를 모두 다운받는 프로그램을 제작하세요.
<img src="https://t1.daumcdn.net/cfile/blog/2223594F58FA34B322" class="txc-image"....
nameList = bsObj.findAll("img", {"class":"txc-image"})
▷ crawler1.daum_blog.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import requests, os, bs4
# 다음 블로그
url = 'http://blog.daum.net'
os.makedirs('daum_blog', exist_ok=True)
res = requests.get(url)
res.raise_for_status() # 200 OK 코드가 아닌 경우 에러 발생
# res.text: 내용 추출
bs = bs4.BeautifulSoup(res.text, 'lxml', from_encoding='utf-8')
tags = bs('div', {'class': 'cont_post'})
print(type(tags)) # <class 'bs4.element.ResultSet'>
print(tags) # list
print('갯수: ' + str(len(tags)))
print('------------------------------------------------------')
for item in tags:
print(item.getText())
print('실행 종료')
-------------------------------------------------------------------------------------
728x90
댓글