Python

[교육데이터분석]관할행정구역 크롤링

곽가누 2024. 6. 9. 17:37
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import pandas as pd
from bs4 import BeautifulSoup
# Chrome 브라우저 실행
driver = webdriver.Chrome()

try:
    import pandas as pd

    # 텍스트 파일을 DataFrame으로 읽어오기
    schools = pd.read_csv(r"C:\Users\gykwa\OneDrive\2024 - 교육데이터분석\학교도로명주소.txt")

    # '학교명' 열의 값만 출력
    for index, row in schools.iterrows():
        school = row['학교']

    # 크롤링할 웹 페이지 URL
        url = "https://www.juso.go.kr/support/AddressMainSearch.do?searchKeyword=%EC%84%9C%EC%9A%B8%ED%8A%B9%EB%B3%84%EC%8B%9C+%EC%84%B1%EB%8F%99%EA%B5%AC+%EB%A7%88%EC%9E%A5%EB%A1%9C+161&dsgubuntext=&dscity1text=&dscounty1text=&dsemd1text=&dsri1text=&dssan1text=&dsrd_nm1text=&aotYn=N"
    # 웹 페이지 열기
        driver.get(url)

    # 'searchKeyword' 입력 상자 로드 대기 (최대 10초)
        WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.NAME, 'searchKeyword')))

    # 'searchKeyword' 입력 상자 찾기
        search_input = driver.find_element(By.NAME, 'searchKeyword')

    # 주소 입력
        search_input.clear()
        search_input.send_keys(school)
        search_input.send_keys("\n")

    # 검색 결과 로드 대기 (최대 10초)

    # 버튼 요소 찾기
        try:
            button = WebDriverWait(driver, 5).until(
                EC.presence_of_element_located((By.XPATH, '/html/body/div[2]/div/main/div[3]/div[2]/ol/li[1]/div[2]/ul/li[3]/span[1]'))
            )
            html = button.get_attribute('outerHTML')
            # BeautifulSoup을 사용하여 HTML 파싱
            soup = BeautifulSoup(html, 'html.parser')

# <span> 태그 안에 있는 텍스트 가져오기
            span_text = soup.find('span').get_text()

# '왕십리도선동' 추출
            address = span_text.split(' ')[2]

            print(address)
            
            
        except TimeoutException:
            print("버튼을 찾지 못했습니다.")
            
finally:
    driver.quit()