본문 바로가기

2019년 혁신성장 청년인재 집중양성(빅데이터)/집중양성과정 프로젝트 01

3. 파이썬 신문사 이미지 크롤링

1. 전체 코드, 중앙일보 홈페이지를 크롤링 했다.

from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd
import urllib.request
import random

html =urlopen("https://joongang.joins.com/") # urlopen으로 홈페이지와의 핸들을 만들고
bsObject = BeautifulSoup(html, "html.parser") # BeautifulSoup을 이용하여 핸들 html을 html.parser를 이용하여 수집한다.

abe= bsObject.find_all("img") #수집된 bsObject에 fin_all함수를 적용하여 "img"태크를 모두 가져와 메모리에 abe를 저장하고

list =[] # 빈 리스트 하나를 정의한 다음에

for i in abe: # abe의 원소에 대해 반복문을 시행한다.
    list.append(i.get('src')) # img태그에 대하여 src태그 값에 해당하는 것을 list에 추가한다



for e in list: # 다시, list의 원소 e에 대하여 반복문을 시행한다.
    try: # 반복문이 시행이 실패하면 무시할 수 있도록 try를 넣어주고
        name = random.randrange(1,2001) # 저장되는 그림 파일의 이름을 주기 위하여 1,2001사이의 번호를 임의 선택한 후
        fullName =str(name) +".jpg" # 그 번호와 .jpg를 같이 묶은 스트링을 fullName이라고 정한다.
        urllib.request.urlretrieve(e, fullName ) #urllib.request.urlretrieve을 통하여, url e의 그림을 다운로드 받으며 이름을 fullName으로 저장한다.
        print("ok") #이 작업이 완료되면"ok"를 출력한다.
    except: # try에 실패하면
        continue # 다시 반복문을 반복한다.
print("done") #반복이 끝나면 "done"을 출력한다.

 

 

2. 크롤링한 url을 pd.DataFram으로 저장한 후, 엑셀파일로 저장을 하여 확인르 해보았다. 

중간에 NA값이 있었기 때문에, try, except를 추가 했다.

 

3.

이 부분에서 멍청한 실수를 많이 했다. urlretrieve()에 이름 부분에 그냥 문자열 하나만을 주었었다.

그래서 파일은 하나의 파일이름을 가진 사진이 갱신되었고, 마지막 url의 사진만 남게 되었다.

 

방법을 찾던 중, random.randrange() 방법을 찾았고 그것을 반복문 위에 올려 놓았다.

이 함수가 반복되지 않으면 숫자는 하나로 고정이었기 때문에, 위의 실수를 반복한 꼴이 되었다.

 

마지막으로 이 random.randrange()를 아래와 같이 반복문 아래에 넣어

반복문이 시행될 때마다, 새로운 숫자가 파일의 이름으로 저장 되도록 했다.

for e in list: # 다시, list의 원소 e에 대하여 반복문을 시행한다.
    try: # 반복문이 시행이 실패하면 무시할 수 있도록 try를 넣어주고
        name = random.randrange(1,2001) # 저장되는 그림 파일의 이름을 주기 위하여 1,2001사이의 번호를 임의 선택한 후
        fullName =str(name) +".jpg" # 그 번호와 .jpg를 같이 묶은 스트링을 fullName이라고 정한다.
        urllib.request.urlretrieve(e, fullName ) #urllib.request.urlretrieve을 통하여, url e의 그림을 다운로드 받으며 이름을 fullName으로 저장한다.
        print("ok") #이 작업이 완료되면"ok"를 출력한다.
    except: # try에 실패하면
        continue # 다시 반복문을 반복한다.

 

 

4. 결과

 

 

5. 라이브러리가 어떤 기능을 가지고 있는지 상세하게 정리해 놓을 필요가 있을 것 같다.

뿌듯했다.