0. 들어가기
-. 앞 포스팅에 이어, 네이버 신용카드 정보 크롤링을 진행한다.
-. 앞에선 자바스크립트로 카드 목록을 뽑아오는 것을 했고, 이번엔 파이썬으로 각 상세정보 페이지를 파싱하는 작업을 하겠다. BeautifulSoup와 requests라는 매우 유명한/유용한 라이브러리를 사용한다. 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 탭을 열어보니 비슷한 항목들이 있다.
-. 해당 부분을 사용하기 위한 코드를 짜보자... 를 할랬는데 너무 길어서 쓰기 귀찮으니 패스.
끝.
'python' 카테고리의 다른 글
[tensorflow] keras (생활코딩) - tensorflow 1.x / 2.x 차이 (0) | 2021.03.31 |
---|---|
[python] 한경 컨센서스 크롤링 (1) | 2021.03.18 |
[python] 전자공시 (dart) feed 가져오기 (0) | 2021.02.21 |
[Python] Jinja(神社) 진자? 신사? - 파이썬은 날먹 (0) | 2021.02.14 |
[Python] Pandas Dataframe- 정렬 및 인덱스 재설정 (0) | 2020.11.25 |
최근댓글