본문 바로가기

WebApp/WebApp

WebApp - 크롤링(With Python)

출처:  youtube Jocoding

 

 

1. 통합개발환경(Intergrated Development Environment) 즉 IDE를 사용한 개발

  (1) - goorm IDE 사용

      - ide.goorm.io -> 로그인 -> 대시보드 -> 새컨테이너(우리가 사용할 가상컴퓨터) 생성

 

  (2) - hello python

 

 

  (3) - beautiful soup라는 크롤링을 위한 파이썬 라이브러리를 사용 

      - 위키피디아에서 예제를 복붙

      -그대로 python index.py 를 해보면 오류가 나는데 bs4 모듈이 설치가 되어 있지 않기 때문이다

      - pip install bs4로 모듈설치

 

 

 

2. 네이버 실시간 검색순위 가져오기

 (1) - 네이버 실시간 검색순위 HTML 코드구성 살펴보기 

 * 개발자창의 왼쪽상단에 파란색으로 활성화된 부분(Ctrl + Shift + C) 를 클릭하고 네이버 실시간 검색순위에 마우스

포인터를 가져다 놓으면 해당 HTML코드가 어느 부분에 어떤식으로 코드구성이 되어 있는지 바로 확인 할 수 있음

 

 

(2) - 위 HTML 및 CSS 코드를 가져오는데 beautifulsoup 라이브러리를 사용해야한다 이를 위해

      공식문서를 살펴보면 CSS Selector를 많이 이용하는데 

 

 

 

(3) - 우리가 찾으려고하는 실시간검색어 tag는 <span class="keyword"> 수능등급컷</span>이기 때문에 class를 찾는 selector를 찾아보자 -->  .은 class를 나타낸다(참고#은 id를 나타냄) 

 

 

 

(4) 즉 span.keyword 를 통해 <span class="keyword">태그를 찾을 수 있다

 

 

 

****근데 오류가 난다... 데이터를 가져오지 않는다 알아보니 실검이 기존 HTML을 직접 사용하는 방법에서

ajax통신 방식으로 바뀌었단다..

 

 

3. zum으로 도전..

 

 

hleecaster.com/python-web-crawling-with-beautifulsoup/ (beautifulsoup 사용법)를

참고하여 이정도만 구현해보자...

 

 

 

아래와 같이 txt파일을 생성하여 크롤링한 텍스트를 쓰기해서 저장할 수도 있다

*아래는 tag가 포함되어 있어 오류가 난다... 텍스트 파일생성 쓰기를 하려면 text일때 가능함..

 

 

 

 

4. 네이버 이미지 크롤링

(1) - img 폴더 아래 jpg형식의 네이버 이미지 파일을 다운로드 받기
- pip install beautifulsoip4(bs4)
- pip install requests

      (네이버 이미지는 한페이지에 최대 50장까지 업로드되기에 50장이 최대치)

출처 : ultrakid.tistory.com/13

* 실행하고자하는 py파일이 위치한 곳에 img라는 폴더를 생성하고 아래 코드를 실행!

from urllib.request import urlopen
from bs4 import BeautifulSoup as bs
from urllib.parse import quote_plus

baseUrl = 'http://search.naver.com/search.naver?sm=tab_hty.top&where=image&query='
plusUrl = input('검색어를 입력하세요 : ')
# 한글 검색 자동 변환
url = baseUrl + quote_plus(plusUrl)
html = urlopen(url)
soup = bs(html, "html.parser")
img = soup.find_all(class_='_img')

n = 1
for i in img:
    imgUrl = i['data-source']
    with urlopen(imgUrl) as f:
        with open('./img/' + plusUrl + str(n)+'.jpg','wb') as h: # w - write b - binary
            img = f.read()
            h.write(img)
    n += 1
print('다운로드 완료')

 

 

 

(2) - 업그레이드 버전 : 상위폴더 와 하위폴더를 생성하여 하위폴더 안에 이미지파일 다운로드

- 출처 : jusunghan.github.io/2020/05/17/naver-image-crawling/

 

from urllib.request import urlopen
from bs4 import BeautifulSoup as bs
from urllib.parse import quote_plus
from pathlib import Path

baseUrl = 'https://search.naver.com/search.naver?where=image&sm=tab_jum&query='
people = {'puppy': ['강다니엘', '백현', '박보검', '송중기'],
          'cat': ['황민현', '시우민', '이종석', '강동원', '이종석', '이준기'],
          'bear': ['마동석', '조진웅', '조세호', '안재홍'],
          'dinosaur': ['윤두준', '이민기', '육성재', '공유', '김우빈'],
          'rabbit': ['정국', '바비', '박지훈', '수호']}
Path("./img").mkdir(parents=True, exist_ok=True)
for k, v in people.items():
    Path("./img/" + k).mkdir(parents=True, exist_ok=True)
    for person in v:
        url = baseUrl + quote_plus(person)
        html = urlopen(url)
        soup = bs(html, "html.parser")
        img = soup.find_all(class_='_img', limit=50)
        Path("./img/" + k + '/' + person).mkdir(parents=True, exist_ok=True)
        n = 1
        for i in img:
            imgUrl = i['data-source']
            with urlopen(imgUrl) as f:
                with open('./img/' + k + '/' + person + '/' + person + ' ' + str(n)+'.jpg','wb') as h: # w - write b - binary
                    img = f.read()
                    h.write(img)
            n += 1
print('다운로드 완료')

 

 

5. 구글 이미지 크롤링

출처 : tiktikeuro.tistory.com/174

 

*기존 google_images_download 라이브러리는 오류가 난다 

(1) - 오류가 났던 기존 라이브러리는 삭제 -> pip uninstall google_images_download

(2) - [github.com/Joeclinton1/google-images-download]  감사한 분이 올려주신 오픈소스 라이브러리 사용

(3) -  해당 라이브러리 python환경에 설치 ->

        pip install git+https://github.com/Joeclinton1/google-images-download.git

(4) - 코드 작성 

from google_images_download import google_images_download   

response = google_images_download.googleimagesdownload()   

arguments = {"keywords":"Polar bears,baloons,Beaches","limit":20,"print_urls":True} 
paths = response.download(arguments)   
print(paths)

(5) - 주의할 점은 해당 코드를 실행할 py파일이 google-images-download 폴더 아래에 있어야 된다!!

 

 

 

(6) - 응용

참조 : pypi.org/project/google_images_download/ 

위 사이트의 Input Arguments 목록을 참조 하여 아래 코드에서 추가한  format 즉 확장자 형식을 jpg만 골라 다운로드 하듯 여러 속성을 추가하여 원하는 작업을 할 수 있다

 

 
※구름ide 안의 컨테이너에서 다운로드받은 폴더를 우클릭하여 zip으로 보내기를 하면 로컬저장소로 다운로드할 수 있다