본문 바로가기

만들기/재고 검색 사이트

02. 재고 크롤러(1)

크롤링 서비스이니 만큼, 주 기능은 크롤링이다. 책 재고를 긁어오기 위해 두 가지가 필요하다 생각했다.

  1. 책에 관한 정보
  2. 해당 책 재고

책에 관한 정보

책에 관한 정보를 처음에는 네이버 책 페이지에서 받아왔는데, 찾아보니 API가 있었다. API는 크롤링보다 빠르고 간단하다...ㅎㅎ 이에 대한 내용은 다음에 API에 관한 글을 적으면서 다룰 예정이다.

책 재고 크롤링

이번 글의 주제인 크롤링. 재고를 긁어오기 위해 교보문고에서 재고를 올리는 URL을 확인했다. 살펴보니 책의 isbn을 이용해 재고를 확인하는 jsp 페이지로 접속이 가능했다. 아래 링크에서 **isbn**이라고 적힌 곳에 책의 isbn을 입력하면 접속 가능하다.

http://www.kyobobook.co.kr/prom/2013/general/StoreStockTable.jsp?barcode=**isbn**&ejkgb=KOR

 

네이버 북 API에서 받아온 isbn을 URL에 넣어서 재고를 크롤링 해오기로 했다. 이를 위해 짠 코드는 아래에.

import requests
from bs4 import BeautifulSoup as BS

def getStock(isbn):
    url = 'http://www.kyobobook.co.kr/prom/2013/general/StoreStockTable.jsp?barcode=' + isbn + '&ejkgb=KOR'
    res = requests.get(url)
    soup = BS(res.text, 'html.parser')
    # 비어있는 태그들 삭제
    [x.decompose() for x in soup.findAll(lambda tag: (not tag.contents or len(tag.get_text(strip=True)) <= 0))]
    store = soup.select('th')
    num = soup.select('a')
    stock = {}
    for i, j in zip(store, num):
        i = i.text
        i = i.strip()
        if i == '':
            pass
        else:
            stock[i] = j.text
    return stock

 

크롤링에 사용한 모듈

getStock이라는 함수를 구현하기 위해 requests와 BeautifulSoup 두 가지 모듈을 사용했다. 이 글에서 라이브러리에 대한 설명을 자세히 하기 시작하면 너무 길어질 것 같으니, 모듈에 관한 글은 따로 작성하도록 하겠다.

requests

requests를 이용하면 파이썬으로 http 통신을 할 수 있다. 간단히 확인해 보자.

변수 res에 네이버로 requets를 요청한 내역을 담아 print하면 200이 출력되는 걸 볼 수 있다. 이 200은 http 상태 코드다. 즉, 제대로 통신이 되었다는 의미다. 이 res는 DOM구조로 읽어온 html 문서를 담고 있다.

DOM이란?

Beautiful Soup

Beautiful Soup은 html, xml 등의 문서를 쉽게 파싱할 수 있도록 도와주는 모듈이다. 

store = soup.select('th')

 

위의 코드는 DOM 문서 내에서 th태그만 가져오겠다는 의미다. 태그가 아니라 좀 더 특징적인 내용을 선택하고 싶을 경우에는 CSS Selector를 이용하면 된다.

#BeautifulSoup에서 CSS Selector 사용법

soup.select('태그')
soup.select('.클래스명') 혹은 ('태그.클래스명')
soup.select('#아이디명') 혹은 ('태그#아이디명')
soup.select('태그 > 자식태그')
soup.select('태그 자손태그')

사용예는 https://neung0.tistory.com/30?category=754836 이 글에서 확인 가능하다.

 

'만들기 > 재고 검색 사이트' 카테고리의 다른 글

04. Requests를 향한 여정  (0) 2019.09.06
03. 재고 크롤러(2)  (0) 2019.09.04
01.  (0) 2019.09.02