반응형

안녕하세요. 지난 시간에 이어 두번째 실습을 가지고 왔습니다.

 

지난 실습에서는 도서 이름을 가지고 왔었는데요. 이번 시간에는 도서 이미지를 가져오도록 하겠습니다.

 

실습-01을 아직 보지않으셨다면 보고오시는 것을 추천 드립니다.

 

 

[python] 웹 크롤러(Web crawler) 실습-01

안녕하세요. 지난 시간에 이어 python을 이용한 웹 크롤러를 만드는 시간을 갖도록 하겠습니다. 웹 크롤러 개념은 아래 링크에서 확인하시면 감사하겠습니다. [python] 웹 크롤러(Web crawler)-01.개념 안녕하세요..

python-an.tistory.com

 

앞 부분은 지난 시간에 보셨던 소스코드와 동일합니다.

 

from bs4 import BeautifulSoup 
import urllib

# 검색할 사이트
root_url = "http://www.yes24.com/24/category/bestseller?CategoryNumber=117&sumgb=06"

# HTML 헤더
head = {'User-Agent' : "Magic Browser"}

# 요청보내기
request = urllib.request.Request(root_url, headers = head) 

# 응답 받기
response = urllib.request.urlopen(request)

# 응답을 Beautifulsoup 패키징화하기
soup = BeautifulSoup(response.read().decode('euc-kr','replace'))

 

그리고 디렉토리(directory)를 만들어 줍니다. 이걸 만드는 목적은 우리가 다운로드할 이미지를 저장하기 위해서 입니다.

 

import os # 시스템 함수

# 이미지를 저장할 디렉토리
directory_path = "book_image"

# 디렉토리가 존재하지 않을 시 자동 생성
if not os.path.exists(directory_path):
    os.makedirs(directory_path)

 

아래 소스코드는 도서 이미지를 다운로드하는 소스코드입니다.

 

# 도서 이미지를 포함하고 있는 태그
contents = soup.find_all('div', {'class':'goodsImgW'})

for content in contents:
    
    # 각 도서를 의미하는 <a> 태그
    book_image = content.find_all('a')

    # 태그안에 있는 모든 이미지
    for i in range(0, len(book_image)):
        if i % 2 ==0:
            # 이미지 URL
            image_url = book_image[i].find_all('img')[0].get("src")
            print(image_url)

            # 이미지 이름
            image_name = book_image[i].find_all('img')[0].get("alt")
            print(image_name)

            urllib.request.urlretrieve(image_url, directory_path+"/"+image_name+".jpg")

 

아래는 결과입니다.

소스코드 출력 결과

 

다운로드된 이미지들

 

이번 실습은 여기까지입니다. 하시다가 이해가 되지 않는 부분이 있으시면 질문을 올려주십시오.

 

 

python 배우기 : 네이버 카페

본 카페에서는 python 프로그래밍을 함계 학습하고 더 나아가 python을 이용해 크롤러, 기계학습을 학습

cafe.naver.com

반응형
from bs4 import BeautifulSoup 
import urllib

이번 시간에는 지난 블로그에 이어 도서의 제목을 가지고 오는 실습을 진행하도록 하겠습니다.

 

 

[python] 웹 크롤러(Web crawler) 실습-01

안녕하세요. 지난 시간에 이어 python을 이용한 웹 크롤러를 만드는 시간을 갖도록 하겠습니다. 웹 크롤러 개념은 아래 링크에서 확인하시면 감사하겠습니다. [python] 웹 크롤러(Web crawler)-01.개념 안녕하세요..

python-an.tistory.com

 

이번 예시에서는 BeautifulSoup과 urllib 두 가지 라이패키지가 필요합니다. urllib는 내장 함수로 별도로 설치할 필요가 없고 BeautifulSoup만 설치해 주시면 됩니다.

 

pip install bs4

 

패키지 import

from bs4 import BeautifulSoup 
import urllib

 

사용자처럼 서버에 요청을 보내고 서버에서는 보낸 응답을 받는 소스코드입니다.

# 검색할 사이트
root_url = "http://www.yes24.com/24/category/bestseller?CategoryNumber=117&sumgb=06"

# HTML 헤더
# 브라우저로 흉내내기, 아닐 경우에는 block 당할 확률이 높음
head = {'User-Agent' : "Magic Browser"}

# 요청보내기
request = urllib.request.Request(root_url, headers = head) 

# 응답 받기
response = urllib.request.urlopen(request)

# 응답을 Beautifulsoup 패키징화하기
# 한글로 디코딩해 주기, 아니면 한글이 깨짐
soup = BeautifulSoup(response.read().decode('euc-kr','replace'))

 

다음은 Beautifulsoup 패키지의 기능을 알아보겠습니다. 

 

Beautifulsoup 패키지를 사용한 응답

 

결과를 보시면 beautifulsoup 패키지를 사용하면 깔끔하게 출력이 되는 것을 알 수 있습니다.

 

soup = BeautifulSoup(response.read().decode('euc-kr','replace'))

print(soup)

 

 

이로써 전체 HTML 페이지를 갖고 왔습니다. 이젠 우리가 원하는 데이터가 있는 부분을 찾도록 하겠습니다.

 

일반적으로 웹 사이트는 아주 많은 layout으로 구성이 되어있고 각 layout은 자신의 "id" 혹은 "class"를 갖고 있어 구분이 가능하게 합니다.

 

content = soup.find_all('table', {'id':'category_layout'})

 

아래 그림을 보시면 각 도서 정보는 <tr>...</tr> 태그에 감싸있는 것을 확인할 수 있습니다. 그리고 이러한 태그가 아주 많이 반복이 됩니다. 우리는 프로그램을 통해 순차적으로 탐색하면서 도서의 정보를 갖고 올 것입니다.

 

 

# 도서 정보를 포함하고 있는 html table
content = soup.find_all('table', {'id':'category_layout'})

#각 도서를 의미하는 tr 태그
book_list = content[0].find_all('tr')

# <tr> 태그 개수
print(len(book_list))

 

태그 개수는 최종적으로 33이 될 것입니다. 그 이유는 아래 그림처럼 다른 글도 <tr> 태그를 사용하기 때문입니다. 즉 도서 정보, 기타 글, 도서 정보, 기타 글... 이런 형식으로 되어 있습니다. 도서의 정보만 추출하기 위해 조건문을 두어 기타 글은 스킵하겠습니다.

 

 

# 첫번째 도서의 제목 갖고오기
for i in range(0, 1):   
    print(book_list[i].findAll("p")[0].text)

 

이번에는 전체 도서 정보를 갖고 오도록 하겠습니다. HTML 코드를 탐색하면 아시겠지만 제목은 <p>...</p>에 쌓여 있습니다.

 

# 전체 <tr> 태그에 있는 데이터를 반복문을 통해 추출 
for i in range(0, len(book_list)):
    
    # 도서 정보만 갖고 오기 위한 규칙
    if i % 2 ==0:
        # 도서 제목만 갖고 오기
        print((book_list[i].find_all("p")[0].text).strip())

 

결과

 

이로써 도서 제목을 가져오는 크롤링 실습을 마치겠습니다.

 

다음 시간에는 크롤러를 이용해 도서 이미지를 다운로드 받는 실습을 진행하겠습니다.

 

하시다가 잘 안되거나 이해가 되지 않는 부분이 있으시면 질문을 남겨 주세요~

 

 

python 배우기 : 네이버 카페

본 카페에서는 python 프로그래밍을 함계 학습하고 더 나아가 python을 이용해 크롤러, 기계학습을 학습

cafe.naver.com

 

 

python 학습(데이터분석, 딥러닝)

본 카페는 python 프로그래밍 언어를 배우고 이를 활용해 웹 크롤러(web crawler), 기계학습(machine learning) 등 여러가지 분야를 알아보고자 합니다.

cafe.daum.net

 

반응형

안녕하세요. 지난 시간에 이어 python을 이용한 웹 크롤러를 만드는 시간을 갖도록 하겠습니다. 웹 크롤러 개념은 아래 링크에서 확인하시면 감사하겠습니다.

 

 

[python] 웹 크롤러(Web crawler)-01.개념

안녕하세요. 이번 시간에는 웹 크롤러(Web crawler)에 대해 간단히 설명을 하겠습니다. 웹 크롤러는 자동으로 웹 사이트의 내용을 수집하는 로봇(robot)입니다. 우리가 익히 알고 있는 구글(google), 네이버(naver..

python-an.tistory.com

프로그래밍을 이용한 데이터 수집은 크게 API(Application Programming Interface)를 통한 수집 래퍼(wrapper) 기반 수집기를 이용한 데이터 수집이 있습니다. 

 

API를 이용한 수집: 네이버, 구글 등 여러 서비스에서는 자체적으로 API 제공하므로 공개된 문서를 참고해 쉽게 데이터를 수집할 수 있습니다.

 

래퍼 기반 수집기: API를 제공하지 않아 특정 웹 사이트의 구조에 맞춘 수집 프로그램

 

서비스에서 API를 제공하지 않을 경우에 래퍼 기반 수집기를 만들어야 합니다.

 

오늘 실습에서는 예쓰24(YES24)에서 검색된 결과에서 도서목록을 갖고 오도록 하겠습니다.

 

출처: http://www.yes24.com/24/category/bestseller?CategoryNumber=117&sumgb=06

 

1. 웹 사이트의 페이지 소스코드 보기

 

앞선 시간에 웹 사이트는 HTML이라는 구조화된 언어로 구성되었다고 설명을 드렸습니다. 여기서 페이지 소스코드 보기는 HTML 소스코드를 보는 것입니다. 페이지 소스코드 보기는 키보드에서 "F12" 입니다.

 

 

2. 원하는 데이터의 위치 확인하기

 

페이지 소스코드 보기를 하셨다면 이젠 우리가 원하는 데이터가 HTML에서 어디에 위치하였는지를 확인해야 합니다.

아래 그림에서와 같이 icon을 클릭합니다. 이 기능은 해당 데이터가 있는 곳을 찾아줍니다.

 

 

해당 icon을 클릭한 후 좌측 이미지가 있는 부분에 마우스 커서(cursor)를 갖다 대시면 선택된 영역은 파랑색으로 변하는 것을 확인할 수 있습니다.

 

물론 한개의 데이터만 수집할 수 있습니다만 모든 데이터를 수집하기 위해 화면에 있는 모든 데이터가 포함 될 수 있는 위치를 찾고 마우스 좌클릭을 합니다.

 

 

좌클릭을 하시면 아래 그림처럼 우리가 원하는 데이터가 파랑색 소스코드에 포함되어 있다는 것을 확인할 수 있습니다.

 

그리고 삼각형 icon을 클릭해 숨겨져 있는 소스코드를 계속 확인합니다. HTML은 사이트의 layout을 일일이 정해주어야 하기 때문에 우리도 점진적으로 구조를 탐색할 필요가 있습니다. 이러한 과정을 거쳐 최종적으로 노이즈가 가장 적은 "알맹이" 부분을 찾는 것을 목표로 합니다.

 

 

드디어 "알맹이" 부분을 찾았습니다. 아래 두 그림을 보시면 첫번째 코드에 전체 데이터가 포함이 되어 있는 것을 알 수 있습니다. 두번째 그림에서는 1개의 데이터만 선택이 된것을 알 수 있습니다. 우리는 첫번째 그림의 소스코드 부분의 데이터를 프로그래밍을 통해 갖고 오면 됩니다.

 

각 이미지의 HTML 소스코드를 순차적으로 확인해 보시면 구조는 똑같고 데이터만 다른 것을 확인하실 수 있습니다. 즉 데이터 개수만큼 소스코드가 반복됩니다. 

 

 

 

다음 시간에 도서의 제목과 URL 주소를 갖고 오는 실습을 진행하도록 하겠습니다.

 

감사합니다.

 

 

python 배우기 : 네이버 카페

본 카페에서는 python 프로그래밍을 함계 학습하고 더 나아가 python을 이용해 크롤러, 기계학습을 학습

cafe.naver.com

 

반응형

안녕하세요. 이번 시간에는 웹 크롤러(Web crawler)에 대해 간단히 설명을 하겠습니다.

 

웹 크롤러는 자동으로 웹 사이트의 내용을 수집하는 로봇(robot)입니다.

 

우리가 익히 알고 있는 구글(google), 네이버(naver), 빙(bing) 등과 같은 검색 엔진(search engine)은 사용자에게 최대한 많은 양의 정보를 제공하기 위해 주기적으로 크롤러를 사용해 전세계의 모든 웹 페이지를 방문합니다.

 

그리고 방문한 웹사이트의 주소, 주제, 내용 등을 수집하고 빠르게 검색되도록 색인(indexing) 작업을 진행합니다.

 

 

우리가 알고있는 웹 사이트(web site)는 HTML(HyperText Markup Language)라는 구조화된 언어로 작성되었습니다. 아래 그림에서 <>으로된 부분을 태그(tag)라고 부르고 실제 내용은 태그로부터 쌓여있는 것을 확인할 수 있습니다.

 

출처: https://ko.khanacademy.org/computing/hour-of-code/hour-of-html/a/quick-tip-html-tags

 

이처럼 사이트는 구조화 즉 규칙성이 있기 때문에 우리는 해당 사이트의 구조만 파악하면 원하는 데이터를 쉽게 갖고 올 수 있습니다. 간략한 로직은 다음과 같습니다.

 

  • 파이썬을 사용해 원하는 웹 사이트를 요청(request)합니다.
  • 그리고 사이트의 내용을 다운로드 받습니다.
  • 우리가 원하는 데이터가 있는 위치를 찾습니다.
  • 그리고 데이터를 포함하고 있는 태그 구조를 분석합니다.
  • 구조를 파악하셨다면 파이썬 프로그래밍을 사용해 자동으로 데이터를 수집합니다.

다음 시간에는 파이썬 라이브러리인 beautifulsoup을 사용해 구글에서 이미지 URL을 갖고오는 실습을 진행하겠습니다.

 

 

python 배우기 : 네이버 카페

본 카페에서는 python 프로그래밍을 함계 학습하고 더 나아가 python을 이용해 크롤러, 기계학습을 학습

cafe.naver.com

 

+ Recent posts