[1.2 Crawling] Claimswap의 Freezing Balance를 받아보자!

2022. 1. 16. 01:30Programming

728x90

안녕하세요.

 

 

저번 블로그에서 크롤링을 위해 원하는 사이트의 HTML을 읽어왔는데 필요한 정보가 없었습니다.

 

동적으로 페이지가 생성되는 사이트는 이런 방식으로는 저희가 원하는 HTML정보를 받아 올 수가 없는데요.

 

이런경우는 아래 링크를 통해 웹드라이버를 다운 받아서 진행하시면 됩니다.

 

https://chromedriver.chromium.org/downloads

 

ChromeDriver - WebDriver for Chrome - Downloads

Current Releases If you are using Chrome version 98, please download ChromeDriver 98.0.4758.48 If you are using Chrome version 97, please download ChromeDriver 97.0.4692.71 If you are using Chrome version 96, please download ChromeDriver 96.0.4664.45 For o

chromedriver.chromium.org

필요한 버전정보는 현재 사용하고 있는 크롬의 도움말 - 크롬정보를 확인하시면 됩니다~

 

웹드라이버의 다운로드가 끝나셨다면 아래의 명령어로 라이브러리 설치를 하시면 됩니다.

pip install selenium

자~ 이제 다시 코딩의 시작입니다.

import requests 
from bs4 import BeautifulSoup
from selenium import webdriver
import time

#크롤링을 위한 사이트 주소
url = "https://scope.klaytn.com/account/0x5f5dec0d6402408ee81f52ab985a9c665b6e6010?tabId=tokenBalance"

driver = webdriver.Chrome('./chromedriver') 

#url로 부터 html을 읽어옴
driver.get(url)
#페이지 로딩 시간이 필요하기 때문에 5초 슬립
time.sleep(5)
response = driver.page_source

soup = BeautifulSoup(response, "html.parser")
#사이트의 HTML 내용을 확인
print(soup)

driver.close()

위 소스를 실행해 보시면 이전과 다르게 저희가 원하는 HTML이 있는걸 확인 하실 수 있을겁니다.

하지만 ValueWithUnit__value 찾기를 했을 경우 동일한 id를 사용하는 태그가 많이 보일겁니다.

 

 

그럼 ValueWithUnit__value 가 있는 태그를 전부 가져오기 위해

soup = BeautifulSoup(response, "html.parser")
#사이트의 HTML 내용을 확인
#print(soup)

#위 print부분을 주석 처리 후 Class 가 ValueWithUnit__value 인 모든 태그를 찾아서 Print
for valList in soup.find_all("span", attrs={"class":"ValueWithUnit__value"}):
    print(valList.find_next("span").text)

이걸 실행하면 Balance는 3번째에 위치해 있는걸 알수있기 때문에 코드를 아래와 같이 수정해서 실행하겠습니다.

import requests 
from bs4 import BeautifulSoup
from selenium import webdriver
import time

#크롤링을 위한 사이트 주소
url = "https://scope.klaytn.com/account/0x5f5dec0d6402408ee81f52ab985a9c665b6e6010?tabId=tokenBalance"

driver = webdriver.Chrome('./chromedriver') 

#url로 부터 html을 읽어옴
driver.get(url)
time.sleep(5)
response = driver.page_source

soup = BeautifulSoup(response, "html.parser")
#사이트의 HTML 내용을 확인
# print(soup)

cnt = 0
for span in soup.find_all("span", attrs={"class":"ValueWithUnit__value"}):
	#cnt가 2가 되었을 경우 반복문을 멈추고 태그의 텍스트를 가져옴
    if(cnt == 2):
        print(span.find_next("span").text)
    cnt = cnt + 1

driver.close()

 

무사히 처음 목표했던 Balance를 가져고 왔습니다.

 

 

다음에는 이렇게 가져온 값을 텔레그램으로 전송하기를 진행하겠습니다.

 

감사합니다.

728x90