2019년 7월 7일 일요일

web page 크롤링(crawling) , 스크레이핑(scraping)시 form post/get를 위한 기본 개념

크롤링(crawling) , 스크레이핑(scraping)시 form post/get를 위한 기본 개념

서론


Web page는 기본적으로 html 문법에 기초합니다. 크롤링을 하다 보면 login 처리를 해야할때도 있고 search 버튼에 text를 넣고 검색 버튼을 눌러야 할때도 있습니다. 이러한 처리를 하기 위해서는 기본적으로 html 문법중 form에 대해서 알아야 합니다.

기본 개념

form은 html의 form tag를 의미합니다.
form tag에는 몇가지 속성이 있습니다.
action : 폼을 전송할 서버 쪽 스크립트 파일을 지정합니다.
name : 폼을 식별하기 위한 이름을 지정합니다.
accept-charset : 폼 전송에 사용할 문자 인코딩을 지정합니다.
target : action에서 지정한 스크립트 파일을 현재 창이 아닌 다른 위치에 열도록 지정합니다.
method : 폼을 서버에 전송할 http 메소드를 정합니다. (GET 또는 POST)
예제)
        <form action = "form.jsp" accept-charset="utf-8" 
              name = "person_info" method = "get"> 
              <input type = "submit" value = "submit"/>
        </form>


POST 와 GET

전송할 http 메소드 종류인 GET과 POST는 브라우저에서 폼 데이터를 가져와 서버로 보내는 똑같은 기능을 수행하지만, 방식은 다릅니다. GET은 폼 데이터를 URL 끝에 붙여서 눈에 보이게 보내지만 POST 방식은 보이지 않게 보냅니다. 받는쪽에서는 POST, GET 방식이던 구별을 하지 않는 경우가 대다수 입니다.

예제 네이버 기본 페이지를 분석한 검색

naver의 기본 페이지중 form을 검색하면 아래 부분이 나옵니다.

<form id="sform" name="sform" action="https://search.naver.com/search.naver" method="get">

 <fieldset>
     <legend class="blind">검색</legend>
        <input type="hidden" id="sm" name="sm" value="top_hty" />
        <input type="hidden" id="fbm" name="fbm" value="0" />
        <input type="hidden" id="acr" name="acr" value="" disabled="disabled" />
        <input type="hidden" id="acq" name="acq" value="" disabled="disabled" />
        <input type="hidden" id="qdt" name="qdt" value="" disabled="disabled" />
        <input type="hidden" id="ie" name="ie" value="utf8" />
        <input type="hidden" id="acir" name="acir" value="" disabled="disabled" />
        <input type="hidden" id="os" name="os" value="" disabled="disabled" />
        <input type="hidden" id="bid" name="bid" value="" disabled="disabled" />
        <input type="hidden" id="pkid" name="pkid" value="" disabled="disabled" />
        <input type="hidden" id="eid" name="eid" value="" disabled="disabled" />
        <input type="hidden" id="mra" name="mra" value="" disabled="disabled" />
        <span class="green_window">
            <input id="query" name="query" type="text" title="검색어 입력" maxlength="255" class="input_text" tabindex="1" accesskey="s" style="ime-mode:active;" autocomplete="off" onclick="document.getElementById('fbm').value=1;" value="" />
        </span>
        <div id="nautocomplete" class="autocomplete">
            <!-- 자동완성 열린 경우 fold 클래스 추가, 딤드인 경우 dim 추가 -->
            <a href="javascript:;" role="button" tabindex="2" class="btn_arw _btn_arw fold"><span class="blind _text">자동완성 펼치기</span><span class="ico_arr"></span></a>
        </div>
        <button id="search_btn" type="submit" title="검색" tabindex="3" class="sch_smit" onmouseover="this.className='sch_smit over'" onmousedown="this.className='sch_smit down'" onmouseout="this.className='sch_smit'" onclick="clickcr(this,'sch.action','','',event);"><span class="blind">검색</span><span class="ico_search_submit"></span></button>
    </fieldset>
</form>

여기에서 form tag안에 type=submit이란건 사용자가 누르는 버튼을 의미하고 input tag는 넣어주는 값을 의미합니다.
input모든 항목을 name=value형태로 값을 넘겨주면 됩니다.
여기에 name=query항목이 검색 내용을 넣는 항목입니다 이 부분의 이름은 website마다 다르므로 시행착오를 해야하고,input의 type=hidden항목도 모두 채워줘야 합니다.

결론은 naver의 form은 get방식이고 input으로 된 항목들을 모두 채우고 그중에 query항목에 검색하고자 하는 문자열을 넣어서 https://search.naver.com/search.naver 여기 page를 get방식으로 호출 하면 됩니다.
실제 xcf라는 문자열을 호출하면 인터넷 창에 아래와 같은 형태가 됩니다.
https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query=xcf

이것을 정리해보면 아래와 같습니다. 한글이라면 url에 직접쓸 수 없고 변환 해야 합니다.
https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query=검색하고자하는 문자열



댓글 없음:

댓글 쓰기