Skip to content
조회 수 7170 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

웹 페이지에서 동적으로 생성되는 데이터 가져오는 방법

 

웹 페이지에서

동적으로 생성되는 데이터는

보통 서버 측에서

클라이언트 측으로 전송됩니다.

 

이를 수신하려면

일반적으로 다음과 같은 방법 중

하나를 사용할 수 있습니다.

 

웹 스크래핑(웹 크롤링)을 통한 데이터 추출

웹 스크래핑은

웹 페이지에서 데이터를 추출하는 기술로,

Python의 BeautifulSoup, Scrapy 등의 라이브러리를

사용할 수 있습니다.

 

웹 스크래핑을 통해

동적으로 생성되는 데이터를

추출하려면,

페이지를 열고

JavaScript를 실행하여

HTML을 동적으로

생성하는 방식을 분석해야 합니다.

 

이 방법은

웹 페이지 소유자의 허가 없이

사용할 경우

법적인 문제가

발생할 수 있으므로

주의해야 합니다.

 

API를 통한 데이터 수신

많은 웹 사이트에서는

API(Application Programming Interface)를 통해

데이터를 제공합니다.

 

API는

서버에서 클라이언트로

데이터를 전송하는 방법으로,

대부분의 경우

JSON 형식으로

데이터가 전송됩니다.

 

웹 페이지에서

데이터를 받아오기 위해서는

해당 웹 사이트의 API 문서를 참조하여

필요한 데이터를 요청하고

응답을 수신해야 합니다.

 

웹 드라이버를 통한 데이터 추출

웹 드라이버는

브라우저를 자동으로 조작하여

웹 페이지를 탐색하고

데이터를 추출하는 기술입니다.

 

Python의 Selenium, Puppeteer 등의

라이브러리를 사용할 수 있습니다.

 

웹 드라이버를 통해

동적으로 생성되는 데이터를

추출하려면,

 

페이지가 완전히 로드되기 전에

JavaScript를 실행하도록 설정해야 합니다.

 

이 방법은 웹 페이지 소유자의 허가 없이 사용할 경우 법적인 문제가 발생할 수 있으므로 주의해야 합니다.

 

 


URL:https://chuksaro.nias.go.kr/hanwoori/cowCntcInfo.do

 

위의 페이지에서 

img id가 captCha를 다운로드 받고,

input id가 search_keyword와 

input id가 answer를 입력 한 뒤,

javascript:chkKeyWord()를 클릭해서 데이터를 가져오는 코딩


 

아래는 Python과 Selenium 라이브러리를 사용하여 웹 페이지에서 captCha 이미지를 다운로드하고 검색어와 captCha 응답을 입력한 뒤 결과를 가져오는 코드입니다.

 
python
from selenium import webdriver
import requests
import os
# 웹 드라이버 설정
driver = webdriver.Chrome('/path/to/chromedriver')
# 페이지 열기
driver.get('https://chuksaro.nias.go.kr/hanwoori/cowCntcInfo.do')
# captCha 이미지 다운로드
captcha = driver.find_element_by_id('captCha')
captcha_url = captcha.get_attribute('src')
response = requests.get(captcha_url)
with open('captcha.png', 'wb') as f:
    f.write(response.content)
# 검색어 입력
search_keyword = driver.find_element_by_id('search_keyword')
search_keyword.send_keys('검색어')
# captCha 응답 입력
captcha_answer = input('captCha 코드를 입력하세요: ')

captcha_input = driver.find_element_by_id('answer')
captcha_input.send_keys(captcha_answer)
# 검색 버튼 클릭
driver.execute_script('chkKeyWord();')
# 결과 가져오기
result = driver.find_element_by_css_selector('.table_style02 tbody tr td').text
print(result)
# 드라이버 종료
driver.quit()
# captCha 이미지 삭제
os.remove('captcha.png')

 

위 코드에서

/path/to/chromedriver를

실제 Chrome 드라이버 파일의 경로로

바꿔야 합니다.

 

또한

captCha 코드를 입력하는 부분은

사용자의 입력을

받도록 되어 있으며,

 

이 부분을 적절한 코드로

대체하셔야 합니다.

 

 

 

아래는

위에서 제공한 코드를

클래스로 구현한 예시입니다.

 

클래스를 사용하면

여러 번 captCha 이미지를

가져와야 할 경우,

 

객체를 생성하여

각각 다른 검색어와

captCha 응답을 입력하면서

사용할 수 있습니다.

 

 
python

from selenium
import webdriver
import requests
import os
class CowCntcInfoScraper:
    def __init__(self):
    
    # 웹 드라이버 설정
        self.driver = webdriver.Chrome('/path/to/chromedriver')

    def __del__(self):
        # 드라이버 종료
        self.driver.quit()
    def search(self, keyword, captcha_answer):
        # 페이지 열기
        self.driver.get('https://chuksaro.nias.go.kr/hanwoori/cowCntcInfo.do')

        # captCha 이미지 다운로드
        captcha = self.driver.find_element_by_id('captCha')
        captcha_url = captcha.get_attribute('src')
        response = requests.get(captcha_url)
        with open('captcha.png', 'wb') as f:
            f.write(response.content)
 
        # 검색어 입력
        search_keyword = self.driver.find_element_by_id('search_keyword')
        search_keyword.clear()
        search_keyword.send_keys(keyword)

        # captCha 응답 입력
        captcha_input = self.driver.find_element_by_id('answer')
        captcha_input.clear()
        captcha_input.send_keys(captcha_answer)

        # 검색 버튼 클릭
        self.driver.execute_script('chkKeyWord();')

        # 결과 가져오기
        result = self.driver.find_element_by_css_selector('.table_style02 tbody tr td').text

        # captCha 이미지 삭제
        os.remove('captcha.png')
        return result

 

위 코드에서

/path/to/chromedriver를

실제 Chrome 드라이버 파일의 경로로

바꾸어야 합니다.

 

search 메서드는

검색어와 captCha 응답을 입력하고

검색 결과를 가져오는 기능을 수행합니다.

 

__init__ 메서드는

객체가 생성될 때 한 번 호출되며,

웹 드라이버를 설정합니다.

 

__del__ 메서드는

객체가 삭제될 때 호출되며,

웹 드라이버를 종료합니다.

 


 

Selenium을 사용하지 않고도

HTTP 요청을 보내서

서버로부터 데이터를 받아올 수 있습니다.

 

아래는

requests 라이브러리와

BeautifulSoup 라이브러리를 사용하여

captCha 이미지를 다운로드하고

검색어와 captCha 응답을 입력한 뒤

결과를 가져오는 예시입니다.

 

 

 

 
python
import requests
import os
from bs4 import BeautifulSoup # 페이지 열기
url = 'https://chuksaro.nias.go.kr/hanwoori/cowCntcInfo.do'
session = requests.Session()
response = session.get(url)
soup = BeautifulSoup(response.content,
'html.parser') # captCha 이미지 다운로드
captcha_url = 'https://chuksaro.nias.go.kr/hanwoori/captcha.do?' + soup.find('input', {'id': 'uuid'})['value']
response = session.get(captcha_url)

with open('captcha.png', 'wb') as f:
f.write(response.content)
# 검색어와 captCha 응답 입력
search_keyword = '검색어'
captcha_answer = input('captCha 코드를 입력하세요: ')
data = {

'search_keyword': search_keyword,
'answer': captcha_answer
}
response = session.post(url, data=data)
# 결과 가져오기
soup = BeautifulSoup(response.content, 'html.parser')
result = soup.select(
'.table_style02 tbody tr td')[0].text.strip()
# captCha 이미지 삭제
os.remove('captcha.png')
print(result)
 

 

위 코드에서

search_keyword 변수는 검색어를,

captcha_answer 변수는 captCha 응답을 나타냅니다.

 

captCha 이미지를 가져오는 부분은

이미지 URL을 구성하여

HTTP GET 요청을 보내는 방식으로 구현하였습니다.

 

검색어와 captCha 응답을

입력하는 부분은 POST 요청으로

데이터를 전송하는 방식으로 구현하였습니다.

 

가져온 HTML 코드를

BeautifulSoup 라이브러리를 사용하여 파싱하고

결과를 가져오는 방식으로 구현하였습니다.

 

 

 

Class로 수정

 

 
python
import requests
import os
from bs4 import BeautifulSoup
class CowCntcInfoScraper:
def __init__(self):
self.session = requests.Session()
def __del__(self):
pass def search(self, keyword, captcha_answer):
# 페이지 열기
url = 'https://chuksaro.nias.go.kr/hanwoori/cowCntcInfo.do'
response = self.session.get(url)
soup = BeautifulSoup(response.content,
'html.parser') # captCha 이미지 다운로드
captcha_url = 'https://chuksaro.nias.go.kr/hanwoori/captcha.do?' + soup.find('input', {'id': 'uuid'})['value']
response = self.session.get(captcha_url)

with open('captcha.png', 'wb') as f:
f.write(response.content)
# 검색어와 captCha 응답 입력
data = {
'search_keyword': keyword,
'answer': captcha_answer
}
response = self.session.post(url, data=data)
# 결과 가져오기
soup = BeautifulSoup(response.content, 'html.parser')
result = soup.select(
'.table_style02 tbody tr td')[0].text.strip()
# captCha 이미지 삭제
os.remove('captcha.png')
return result
 

 

위 코드에서

search 메서드는

검색어와 captCha 응답을 입력하고

검색 결과를 가져오는 기능을 수행합니다.

 

__init__ 메서드는

객체가 생성될 때 한 번 호출되며,

requests Session 객체를 생성합니다.

 

__del__ 메서드는

객체가 삭제될 때 호출되며,

captCha 이미지 파일을 삭제합니다.

로그인 후 댓글쓰기가 가능합니다.

?

List of Articles
번호 분류 제목 날짜 조회 수
897 파이썬 네이버 주식의 기업정보와 펀더멘탈정보 소스 가져오기 2023.03.10 3543
896 파이썬 네이버 주식에서 종목의 투자정보 자료 가져오기 1 2023.03.10 2464
895 [Docs]스프레드시트 H열에 날짜가 10일 안으로 다가왔다면 메일을 발송하는 스크립트 2023.03.10 2481
894 [Docs]스프레드시트 구글 스프레드시트 스크립트를 사용하여 지메일로 이메일을 보내기 2023.03.10 2897
893 [Docs]스프레드시트 스프레드시트의 값의 변화에 따라 지메일로 메일을 보내는 스크립트 2023.03.10 1883
892 [Docs]스프레드시트 스프레드시트에서 수정, 삭제 버튼 만들기 2023.03.09 2022
891 [Docs]스프레드시트 스프레드시트에서 검색 버튼 만들기 2023.03.09 2482
890 [Docs]스프레드시트 스프레드시트에서 삽입 버튼 만들기(chatGPT 에게 물어봄) 2023.03.09 1678
889 파이썬 파이썬 변수가 정의되었는지 여부 확인방법코드 2023.03.04 4475
888 파이썬 python class def 2023.03.04 2527
887 파이썬 파이썬 비활성화 된 창 활성화 시키기 2023.02.25 3765
886 파이썬 파이썬으로 비활성화 된 창의 이미지를 캡쳐하는 방법 2023.02.25 4326
885 파이썬 파이썬 비활성화 창 이미지 캡쳐하고 클릭하기 2023.02.24 4540
884 파이썬 파이썬 모듈 업그레이드 명령어 2023.02.21 3811
883 파이썬 파이썬 pyautogui 자주쓰는 이미지 서치 def 지정하기 2023.02.12 5469
882 파이썬 파이썬 pyautogui 화면에 여러개의 동일한 이미지가 있을 때 n번째 이미지 선택하기 2023.02.12 5351
881 파이썬 chatGPT file 2023.02.11 4585
880 파이썬 파이썬 easyocr 이미지 문자 인식 2023.01.16 10576
879 파이썬 파이썬을 이용하여 매크로 만들기 2023.01.13 9440
878 컴퓨터잡담 어도비 프리미어 프로 템플릿 폴더 관리방법 7 2022.12.10 17531
Board Pagination Prev 1 2 3 4 5 ... 46 Next
/ 46

http://urin79.com

우린친구블로그

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소