ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python 웹크롤링] 웹사이트에서 자동으로 검색어 입력 + 팝업 종료 하는 법
    데이터 분석/Python 2021. 4. 29. 21:33

    파이썬을 통해 웹사이트에서 자동으로 검색 키워드 입력하기, 팝업창 자동종료 하는 법 

    웹크롤링을 해보도록 하겠습니다.

     

     

     

    공공데이터 포털 사이트를 예시로 실행 해보겠습니다.

    https://www.data.go.kr

     

    공공데이터 포털

    국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

    www.data.go.kr

     

     

    웹크롤링을 위한 준비사항



    HTML 소스코드에서 원하는 태그를 찾기 위해서 Beautiful Soup를 설치하고

     web driver를 실행하여 웹 페이지를 실행하여 데이터를 수집할 selenium을 설치해야 합니다.

     

    라이브러리 설치 방법


    - cmd를 관리자 권한으로 실행 후 pip install bs4,  pip install selenium 으로 설치한다.
    - jupyter notebook에서 !pip install bs4, !pip install selenium 으로 설치한다.

    - pycharm에서 실행 시 빨간줄로 그어진 bs4, selenium을 클릭하여 install 한다.

     

    Beautiful Soup 라이브러리는 PC로 원하는 HTML코드를 가져오기 위해 사용합니다.

     

     

     

    설치가 완료되었다면 selenium 패키지가 사용할 웹 브라우저 프로그램(웹 드라이버)을 설치한다.

    크롬 드라이버 버전은 크롬 툴바에서 설정->chrome 정보에서 확인할 수 있습니다.

    동일한 버전을 아래 다운로드 주소에서 다운 받습니다. 

     



    다운로드 주소:  https://sites.google.com/a/chromium.org/chromedriver/downloads

     

     

     

    저는 90.0.4430.93 버전이네요

     

     

    1. 크롬 드라이버를 사용해서 웹 브라우저를 실행합니다.

    path = "C:\study\python\datadown\chromedriver.exe"
    driver = webdriver.Chrome(path)
    
    driver.get("https://www.data.go.kr/")
    time.sleep(2)
    #위 페이지가 모두 열릴 때까지 2초 대기

     

    위 코드를 실행하면 자동으로 팝업이 뜨면서 웹페이지가 실행되고 아래 공공데이터 포털 사이트로 들어가집니다.

    time.sleep으로 시간을 주고 대기하는 것이 좋습니다. 

     

    웹페이지로 이동하면 F12를 눌러 개발자 도구를 엽니다.

     

    우선 팝업창이 2개나 떴습니다. HTML 태그를 통해 보이는 곳을 컴퓨터가 직접 클릭하고 입력하기 때문에 검색창이 보이질 않습니다. 팝업창을 닫아줘야 합니다.

     

    우선 팝업창 XPath 태그를 알아내야 합니다. 

     

    아래 개발자 도구에서 첫번째 화살표 모양을 클릭합니다.

     

     

    닫고 싶은 창의 X자 닫기 표시를 클릭하면 각각 개발자 도구에 해당 HTML태그로 이동합니다. 

     

     

    이동한 태그의 오른쪽 마우스 클릭-> Copy->Copy XPath를 눌러서 XPath를 클릭하면 자동으로 복사합니다.

     

     

     

    2개 창의 XPath는 각각 아래와 같습니다. 

     

    //*[@id="layer_popup_info_1"]/div[1]/a

    //*[@id="layer_popup_info_0"]/div[1]/a

     

    만약 창이 겹쳐져 있으면 눈에 보이는 창부터 없애야 합니다. 즉 순서로서 info_0 보다 info_1이 먼저 와야 합니다. X닫기 버튼이 다른 팝업창에 가려져 있으면 해당 태그를 통해 닫기를 시도해도 닫혀지지 않습니다.

     

    try except 구문을 이용해서 닫기 버튼을 클릭하도록 유도합니다. time.sleep으로 1초 여유를 주었습니다.

    팝업창이 2개 밖에 없어서 아래처럼 코딩했지만 만약 닫아야할 창이 많다면 for문을 통해 닫아줘도 되겠지요

    보통 많아야 3개를 넘지는 않을 것 같습니다.

     

    2. 팝업창 자동으로 닫아줍니다.

    # 2개 alert창 닫기 
    try:
        driver.find_element_by_xpath('//*[@id="layer_popup_info_1"]/div[1]/a').click()
        time.sleep(1)
        driver.find_element_by_xpath('//*[@id="layer_popup_info_0"]/div[1]/a').click()
    except:
        print("코로나 창이 없습니다.")

     

    검색창을 화살표로 클릭하여 태그를 확인합니다. 

    보통 사이트마다 태그가 다르니 확인을 해야 합니다.

     

    공공데이터 포털의 검색창 id는 "keyword" 입니다.

     

    3. 검색할 키워드를 입력합니다.

     

    find_element_by_id() 함수를 이용하여 keword를 입력합니다.

    그전에 검색어를 무엇을 입력할 지 input()으로 미리 입력하게 하면 편합니다.

    query_txt = input('크롤링할 키워드는 무엇입니까?:')
    # 사용자에게 검색어 입력
    
    
    element = driver.find_element_by_id("keyword")
    element.send_keys(query_txt)  #검색어입력하게 하는 부분
    element.send_keys("\n")  #엔터효과
    #검색창의 이름을 찾아서 검색어를 입력

     

    "코로나"를 검색합니다.

     

    실행하면 아래 화면처럼 자동으로 키워드 검색 완료됩니다

     


     

     

    페이지의 특정 element에 접근하는 방식

      find_element_by_name("name")      -->  요소의 name속성 값으로 검색
      find_element_by_id("id")               -->   요소의 id속성 값으로 검색
      find_element_by_xpath("xpath")     --> 웹페이지의 xpath 경로 검색 
      find_element_by_css_selector("#css>div.selector")   --> css selector로 검색
      find_element_by_class_name("class")  --> 요소의 class 속성 값으로 검색
      find_element_by_tag_name("h1")      --> 요소(태그)이름으로 검색

     

     

     XPath(XML Path Language)

    - XPath는 XML 문서의 특정 부분의 위치를 찾을 때 사용하는 언어이다.

    - XPath는 XML 문서안에 요소와 속성을 탐색하다.

    - '/'는 문서의 계층 구조에서 최상위 노드 역할을 하는 가상 노드이다.

    - XPath에서 속성을 지정하려면 @를 사용한다

    - //* 는 문서 내의 모슨 요소를 선택한다. 

    - [@id="gnb"] 는 id='gnb' 인것을 선택한다.

    - /div/div[1] 는 /div 자식인 첫번째 div요소

     

     

    반응형
Designed by Tistory.