반응형

0. 들어가기

-. 앞 포스팅에 이어, 네이버 신용카드 정보 크롤링을 진행한다.

-. 앞에선 자바스크립트로 카드 목록을 뽑아오는 것을 했고, 이번엔 파이썬으로 각 상세정보 페이지를 파싱하는 작업을 하겠다. BeautifulSouprequests라는 매우 유명한/유용한 라이브러리를 사용한다. C#으로도 비슷한 행위를 할 수 있지만, 이번엔 굳이 gui 환경 꾸밀 필요가 없으니 파이썬으로 한다.

1. 패키지 설치

-. 정말 많은 블로그들에서 똑같은 말을 하니까 굳이 할 필요 있나 싶지만? 그냥 나도한다. 구체적인 설명은 각 documentation 참고. 아 참고로, 설치명은 beautifulsoup4 다. 

pip install requests
pip install beautifulsoup4

2. Html 파싱 테스트

-. 젤 처음, requests 모듈을 이용해 각 카드 설명 페이지가 정상적으로 읽혀지는지 확인한다. 주소는 앞 포스팅에서 미리 javascript로 긁어놓은 것을 이용한다.

import requests
from bs4 import BeautifulSoup

url = 'https://card-search.naver.com/item?cardAdId=1692'

response = requests.get(url)


html = response.text
soup = BeautifulSoup(html, 'html.parser')
print(soup)

-. 잘 된다. 다행히 스크래핑이 막히진 않은 것 같다. 

3. 원하는 부분만 추출

-. 자바스크립트로 원하는 내용 (카드이름, 혜택종류, 상세혜택)을 뽑기 위한 작업을 했었다. BeautifulSoup에도 동일한 기능을 하는 메서드가 있으니 찾아서 쓰자. 원하는 결과가 나오는지 확인한다.

import requests
from bs4 import BeautifulSoup

url = 'https://card-search.naver.com/item?cardAdId=1692'

response = requests.get(url)


html = response.text
soup = BeautifulSoup(html, 'html.parser')

#카드이름
cardName = soup.select("b.txt")
print("card name: ", cardName[0].text)
>>card name:  KB국민 청춘대로 톡톡카드

#혜택종류
print("\n 혜택종류")
benefitTypes = soup.select("b.text")
for each in benefitTypes:
    print(each.text, end=", ")
>>카페/베이커리, 외식, 통신, 대중교통, 간편결제, 연회비지원, 쇼핑, 영화, 편의점, 주유, 대형마트, 레저, 문화, 뷰티, 

#상세혜택
print("\n 상세혜택")
benefits = soup.select("dt.detail_title")
for each in benefits:
    print(each.text, end=", ")
>>오직 톡톡카드만 스벅 최대 60%할인, 스벅 아이스 아메리카노 1,640원!, 버거/패스트푸드 최대 30% 할인!, 외식업종 간편결제 이용 시 10%할인, 3대통신사 SKT, KT, LG U+, 이동통신요금 10% 할인, 버스, 지하철, 택시 10% 할인, 네이버페이, 카카오페이, 삼성페이 등, 간편결제(Pay) 이용 시 10%할인, 홈페이지 내 신용카드 최초 발급 시, 온라인신규신청 연회비 100% 캐시백, 백화점, 온라인쇼핑 등 쇼핑영역, 간편결제(Pay) 이용 시 10%할인, CGV, 롯데시네마 등 영화관, 간편결제(Pay) 이용 시 10%할인, CU,GS25,세븐일레븐 등 편의점, 간편결제(Pay) 이용 시 10%할인, SK, GS칼텍스 등 주유소, 간편결제(Pay) 이용 시 10%할인, 간편결제(Pay) 이용 시 10%할인, 이마트,롯데마트,홈플러스 등 대형마트, 롯데월드,에버랜드 등 레저업종, 간편결제(Pay) 이용 시 10%할인, 연극, 뮤지컬, 공연 등 문화업종, 간편결제(Pay) 이용 시 10%할인, 화장품, 미용실 등 뷰티업종, 간편결제(Pay) 이용 시 10%할인, 

    
print("\n 상세혜택2")
benefits2 = soup.select("dd.desc")
for each in benefits2:
    print(each.text, end=", ")
>>스타벅스 1만원이용시 최대 6천원할인, 국내 1만원,해외 1만2천원신규 최대 1만2천원 지급, 직전 1개월  합계 30만원 이상, #스벅 최대 60% #패스트푸드20%#간편결제 10% #교통/통신10%, 

-. 상세혜택 2가 좀 이상하게 나온다. 너무 적게 나온다. 원인을 확인해보니 클릭을 하는 순간 나타나는 항목들이 있다.

<상세혜택 마우스 클릭 전/후>

-. 이를 어디서 찾나 보는데, 혹시나 해서 아래 javascript 탭을 열어보니 비슷한 항목들이 있다.

<(좌상단)네이버 카드 설명부와 (우하단) BeautifulSoup으로 긁어 온 자바스크립트 부분>

-. 해당 부분을 사용하기 위한 코드를 짜보자... 를 할랬는데 너무 길어서 쓰기 귀찮으니 패스.

끝.

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기