Python METAR Crawling

METAR 가져오기

2019 Big Contest 공항 기본 정보

ARP1: GMP(김포), RKSS
ARP2: PUS(김해), RKPK
ARP3: CJU(제주), RKPC
ARP4: TAE(대구), RKTN
ARP5: USN(울산), RKPU
ARP6: CJJ(청주), RKTU
ARP7: MWX(무안), RKJB
ARP8: KWJ(광주), RKJJ
ARP9: RSU(여수), RKJY
ARP10: YNY(양양), RKNY
ARP11: KPO(포항), RKTH
ARP12: HIN(사천), RKPS
ARP13: KUV(군산), RKJK
ARP14: WJU(원주), RKNW
ARP15: ICN(인천), RKSI


라이브러리 불러오기

import requests
from bs4 import BeautifulSoup
import pandas as pd


requests로 접근

login_info의 loginIdpassword의 값으로는 항공운항지원 기상서비스 계정 이용

# 세션 시작
session = requests.session()

# 로그인하기
login_info = {'role': 'AMI0002',
              'pwd': 'f4IDn1Qlt+8FXjR3ypy/OhHlPSo96602rt2W5ZrkiS0=',
              'loginId': '********',
              'password': '********',
              'x': '0',
              'y': '0'}

url_login = 'https://global.amo.go.kr/common/login/LoginConfirmAcwis.do'
res = session.post(url_login, data = login_info, verify = False)

print(res.text)
    c:\users\kmosh\appdata\local\programs\python\python37\lib\site-packages\urllib3\connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
      InsecureRequestWarning)
    c:\users\kmosh\appdata\local\programs\python\python37\lib\site-packages\urllib3\connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
      InsecureRequestWarning)
      
     
     
     
     
     
     
     
     
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
     
     
     
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title>항공운항지원 기상서비스</title>
    <script type="text/javascript" src="/js/common/jquery/jquery-1.8.1.js"></script>
    <!-- script type="text/javascript" language="javascript" src="/js/kama/jquery-2.1.1.js"></script>
    <script type="text/javascript" src="/js/common/jquery/jquery-ui.js"></script>
    <script type="text/javascript" src="/js/common/jqgrid/i18n/grid.locale-en.js"></script>
     script type="text/javascript" src="/js/common/jqgrid/jquery.jqGrid.min.js"></script -->	
     
    <!-- script type="text/javascript" src="/js/common/kafui/kaf.config.js"></script -->
    <!-- script type="text/javascript" src="/js/common/kafui/kaf.core.js"></script -->
    <!--script type="text/javascript" src="/js/common/kafui/kaf.message.api.js"></script-->
    <!--script type="text/javascript" src="/js/common/kafui/kaf.table.js"></script-->
    <!--script type="text/javascript" src="/js/common/kafui/kaf.valid.js"></script-->
     
    <!-- script type="text/javascript" src="/js/comis4/uis.common.js"></script -->
    <script type="text/javascript" src="/js/comis4/uis.design.js"></script>
    <script type="text/javascript" src="/js/common/jquery/jquery.number.js"></script>
     
    <script type="text/javascript" charset="euc-kr" src="/js/kama/ui.js"></script>
    <script type="text/javascript" charset="euc-kr" src="/js/kama/menu.js"></script>
    <link rel="stylesheet" type="text/css" href="/css/kama/board.css" />
    <link rel="stylesheet" type="text/css" href="/css/kama/layout.css" />
     
    <link rel="shortcut icon" href="/favicon.ico" />
    <!--[if IE 7]>
    <link rel="stylesheet" type="text/css" href="/css/common/ie7.css" />
    <![endif]-->
    <!--[if IE 8]>
    <link rel="stylesheet" type="text/css" href="/css/common/ie8.css" />
    <![endif]-->
    <style type="text/css">
     html,body{height:100%;overflow:hidden;}
     iframe{display:block;width:100%;}
    </style>
     
    <script type="text/javascript">
    function f_iframeResize () {
    	//$("#iframe_type01").height( $(window).height()- 120 );
    	$("#iframe_type01").height( $(window).height()- 90 );
    }
    $(function(){
    	// onload 시
    	f_iframeResize();
     
    	// window reisze 시
    	$(window).resize(function(){
    	f_iframeResize();
    	});
    });
     
    </script>
     
     
    </head>
     
     
    # ...
    # 중간 생략
    # ...
     
     
    <body>
    <div id="noActive" name="noActive" style="position: absolute;display:none;width:100%;border:10px"><iframe src="" title="내용없음" id="iframe_type02" name="iframe_type02" frameborder="0" scrolling="no" style="Z-INDEX:9998;filter:alpha(opacity=0);height:800px;"></iframe></div>
    <div style="position:relative;">
    <!-- contents 시작 -->
    		<iframe src="/kama/main/acwisMain.do" title="내용없음" id="iframe_type01" name="iframe_type01" frameborder="0" scrolling="auto" allowFullScreen="true"></iframe>
    <!-- end contents -->
    </div>
    </body>
    </html>
start_date = '2017.01.01 00:00'
end_date = '2017.01.31 23:59'
airport_list = ['RKSS', 'RKPK', 'RKPC', 'RKTN', 'RKPU', 'RKTU', 'RKJB', 'RKJJ', 'RKJY', 'RKNY', 'RKTH', 'RKPS', 'RKJK', 'RKNW', 'RKSI']
airport_total = 'RKSS, RKPK, RKPC, RKTN, RKPU, RKTU, RKJB, RKJJ, RKJY, RKNY, RKTH, RKPS, RKJK, RKNW, RKSI'
print(start_date)
print(end_date)
print(airport_list[2])
print(airport_total)
2017.01.01 00:00
2017.01.31 23:59
RKPC
RKSS, RKPK, RKPC, RKTN, RKPU, RKTU, RKJB, RKJJ, RKJY, RKNY, RKTH, RKPS, RKJK, RKNW, RKSI


공항 한 개

# metar 페이지 접근
detail = {'rUri': '/aftnwafsmetar/MetarList.dn',
          'filepath': 'server.acdb.airstcs.pdf.filepath',
          'pageType': 'MESSAGE',
          'tmCheck': 'on',
          'tmSt': start_date,
          'tmEd': end_date,
          'tbType': 'AFTN',
          'stnCd': airport_list[2]}

url_metar = "https://global.amo.go.kr/aftnwafsmetar/MetarList.do"
res = session.post(url_metar, data = detail)
print(res.text)
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
     
     
     
     
     
     
     
     
     
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <!-- <meta http-equiv="X-UA-Compatible" content="IE=edge" /> -->
    <title>항공기상정보 서비스</title>
     
     
    <link rel="shortcut icon" href="/favicon.ico" />
    <!--[if IE 7]>
    <link rel="stylesheet" type="text/css" href="/css/common/ie7.css" />
    <![endif]-->
    <!--[if IE 8]>
    <link rel="stylesheet" type="text/css" href="/css/common/ie8.css" />
    <![endif]-->
    <!-- script type="text/javascript" src="/js/common/jquery/jquery-1.8.3.js"></script -->
    <script type="text/javascript" language="javascript" src="/js/common/jquery/jquery-2.1.1.min.js"></script>
    <script type="text/javascript" src="/js/common/jquery/plugin/ui/jquery-ui-1.10.2.custom.js"></script>
    <link rel="stylesheet" type="text/css" href="/js/common/jquery/plugin/ui/jquery-ui-1.10.2.custom.css">
    <script type="text/javascript" src="/js/common/jquery/plugin/ui/jquery-ui-timepicker-addon.js"></script>
    <script type="text/javascript" src="/js/common/jquery/jquery.serializeanything.js"></script>
    <script type="text/javascript" src="/js/common/jquery/jquery.blockUI.js"></script>
    <script type="text/javascript" src="/js/common/jquery/plugin/ui/jquery.form.js"></script>
    <script type="text/javascript" src="/js/comis4/amis.common.js"></script>
    <script type="text/javascript" src="/js/comis4/uis.common.js"></script>
    <script type="text/javascript" src="/js/comis4/dateutil.js"></script>
     
     
    # ...
    # 중간 생략
    # ...
     
    			
    			<!-- METAR MESSAGE -->
    			<div class="con_all2" style=" display: none;" id="messageMetarDiv">
    				<div class="dataT">
    					<table id="contentsTb2" width="99%" border="1" style="table-layout:fixed; float:left;">
    						<colgroup>
    							<col width="100%" />
    						</colgroup>
    						<tbody>
    							
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 012300Z 21006KT 9999 FEW050 BKN120 11/03 Q1026 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 012200Z 21006KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 012100Z 21007KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 012000Z 21007KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 011900Z 22007KT 9999 SCT040 BKN120 09/03 Q1027 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 011800Z 21007KT 9999 SCT040 BKN120 09/02 Q1027 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 011700Z 23008KT 9999 SCT040 BKN150 09/02 Q1027 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 011600Z 21008KT 9999 BKN040 09/01 Q1028 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 011500Z 21007KT 9999 BKN040 09/01 Q1028 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 011400Z 19006KT 9999 BKN040 09/M00 Q1029 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 011300Z 20005KT 9000 BKN040 08/01 Q1029 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 011200Z 22004KT 8000 BKN040 08/01 Q1030 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 011100Z 21006KT 9999 BKN040 07/M00 Q1030 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 011000Z 20007KT 9999 BKN040 08/M00 Q1030 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 010900Z 25007KT 9999 BKN035 08/01 Q1031 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 010800Z 25008KT 9999 BKN035 09/01 Q1030 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 010700Z 24005KT 210V270 9999 BKN030 09/01 Q1030
              NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 010600Z 30004KT 260V340 9999 BKN030 09/01 Q1031
              NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 010500Z 28004KT 250V330 9999 BKN030 09/01 Q1031
              NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 010400Z 25003KT 9999 BKN035 09/00 Q1032 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 010300Z 31003KT 250V350 9999 BKN035 09/01 Q1033
              NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 010200Z 31004KT 270V340 9999 BKN035 09/00 Q1034
              NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 010100Z 20004KT 170V240 9000 BKN035 08/00 Q1034
              NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    								<tr> 
    									<td class="txt_l">
    									
    										
    										
    											METAR RKPC 010000Z 20005KT 7000 BKN030 07/01 Q1034 NOSIG=
    										
    									
    									</td>
    								</tr>
    							
    						</tbody>
    					</table>
    				</div>
    			</div>
     
    			
    # ...
    # 중간 생략
    # ...
     
     
    </body>
     
     
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
    <script type="text/javascript" src="/js/comis4/logger.js"></script>
     
     
    c:\users\kmosh\appdata\local\programs\python\python37\lib\site-packages\urllib3\connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
      InsecureRequestWarning)
soup = BeautifulSoup(res.text, "html.parser")
print(soup.prettify())
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html lang="ko" xml:lang="ko" xmlns="http://www.w3.org/1999/xhtml">
     <head>
      <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
      <meta content="text/javascript" http-equiv="Content-Script-Type"/>
      <meta content="text/css" http-equiv="Content-Style-Type"/>
      <!-- <meta http-equiv="X-UA-Compatible" content="IE=edge" /> -->
      <title>
       항공기상정보 서비스
      </title>
      <link href="/favicon.ico" rel="shortcut icon"/>
      <!--[if IE 7]>
    <link rel="stylesheet" type="text/css" href="/css/common/ie7.css" />
    <![endif]-->
      <!--[if IE 8]>
    <link rel="stylesheet" type="text/css" href="/css/common/ie8.css" />
    <![endif]-->
      <!-- script type="text/javascript" src="/js/common/jquery/jquery-1.8.3.js"></script -->
      <script language="javascript" src="/js/common/jquery/jquery-2.1.1.min.js" type="text/javascript">
      </script>
      <script src="/js/common/jquery/plugin/ui/jquery-ui-1.10.2.custom.js" type="text/javascript">
      </script>
      <link href="/js/common/jquery/plugin/ui/jquery-ui-1.10.2.custom.css" rel="stylesheet" type="text/css"/>
      <script src="/js/common/jquery/plugin/ui/jquery-ui-timepicker-addon.js" type="text/javascript">
      </script>
      <script src="/js/common/jquery/jquery.serializeanything.js" type="text/javascript">
      </script>
      <script src="/js/common/jquery/jquery.blockUI.js" type="text/javascript">
      </script>
      <script src="/js/common/jquery/plugin/ui/jquery.form.js" type="text/javascript">
      </script>
      <script src="/js/comis4/amis.common.js" type="text/javascript">
      </script>
      <script src="/js/comis4/uis.common.js" type="text/javascript">
      </script>
      <script src="/js/comis4/dateutil.js" type="text/javascript">
      </script>
     
     
    # ...
    # 중간 생략
    # ...
     
              <tr>
               <td class="txt_l">
                METAR RKPC 012100Z 21007KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 012000Z 21007KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 011900Z 22007KT 9999 SCT040 BKN120 09/03 Q1027 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 011800Z 21007KT 9999 SCT040 BKN120 09/02 Q1027 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 011700Z 23008KT 9999 SCT040 BKN150 09/02 Q1027 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 011600Z 21008KT 9999 BKN040 09/01 Q1028 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 011500Z 21007KT 9999 BKN040 09/01 Q1028 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 011400Z 19006KT 9999 BKN040 09/M00 Q1029 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 011300Z 20005KT 9000 BKN040 08/01 Q1029 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 011200Z 22004KT 8000 BKN040 08/01 Q1030 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 011100Z 21006KT 9999 BKN040 07/M00 Q1030 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 011000Z 20007KT 9999 BKN040 08/M00 Q1030 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 010900Z 25007KT 9999 BKN035 08/01 Q1031 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 010800Z 25008KT 9999 BKN035 09/01 Q1030 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 010700Z 24005KT 210V270 9999 BKN030 09/01 Q1030
              NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 010600Z 30004KT 260V340 9999 BKN030 09/01 Q1031
              NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 010500Z 28004KT 250V330 9999 BKN030 09/01 Q1031
              NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 010400Z 25003KT 9999 BKN035 09/00 Q1032 NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 010300Z 31003KT 250V350 9999 BKN035 09/01 Q1033
              NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 010200Z 31004KT 270V340 9999 BKN035 09/00 Q1034
              NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 010100Z 20004KT 170V240 9000 BKN035 08/00 Q1034
              NOSIG=
               </td>
              </tr>
              <tr>
               <td class="txt_l">
                METAR RKPC 010000Z 20005KT 7000 BKN030 07/01 Q1034 NOSIG=
               </td>
              </tr>
             </tbody>
            </table>
           </div>
          </div>
     
     
    # ...
    # 중간 생략
    # ...
     
     
       </body>
       <head>
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
        <script src="/js/comis4/logger.js" type="text/javascript">
        </script>
       </head>
      </link>
     </head>
    </html>
metar_mes = soup.find("div", {"id":"messageMetarDiv"})
metar_mes
    <div class="con_all2" id="messageMetarDiv" style=" display: none;">
    <div class="dataT">
    <table border="1" id="contentsTb2" style="table-layout:fixed; float:left;" width="99%">
    <colgroup>
    <col width="100%"/>
    </colgroup>
    <tbody>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 012300Z 21006KT 9999 FEW050 BKN120 11/03 Q1026 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 012200Z 21006KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 012100Z 21007KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 012000Z 21007KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 011900Z 22007KT 9999 SCT040 BKN120 09/03 Q1027 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 011800Z 21007KT 9999 SCT040 BKN120 09/02 Q1027 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 011700Z 23008KT 9999 SCT040 BKN150 09/02 Q1027 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 011600Z 21008KT 9999 BKN040 09/01 Q1028 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 011500Z 21007KT 9999 BKN040 09/01 Q1028 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 011400Z 19006KT 9999 BKN040 09/M00 Q1029 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 011300Z 20005KT 9000 BKN040 08/01 Q1029 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 011200Z 22004KT 8000 BKN040 08/01 Q1030 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 011100Z 21006KT 9999 BKN040 07/M00 Q1030 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 011000Z 20007KT 9999 BKN040 08/M00 Q1030 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 010900Z 25007KT 9999 BKN035 08/01 Q1031 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 010800Z 25008KT 9999 BKN035 09/01 Q1030 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 010700Z 24005KT 210V270 9999 BKN030 09/01 Q1030
              NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 010600Z 30004KT 260V340 9999 BKN030 09/01 Q1031
              NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 010500Z 28004KT 250V330 9999 BKN030 09/01 Q1031
              NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 010400Z 25003KT 9999 BKN035 09/00 Q1032 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 010300Z 31003KT 250V350 9999 BKN035 09/01 Q1033
              NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 010200Z 31004KT 270V340 9999 BKN035 09/00 Q1034
              NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 010100Z 20004KT 170V240 9000 BKN035 08/00 Q1034
              NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKPC 010000Z 20005KT 7000 BKN030 07/01 Q1034 NOSIG=
    										
    									
    									</td>
    </tr>
    </tbody>
    </table>
    </div>
    </div>
contents = metar_mes.find_all("td", {"class":"txt_l"})
contents
    [<td class="txt_l">
     									
     										
     										
     											METAR RKPC 012300Z 21006KT 9999 FEW050 BKN120 11/03 Q1026 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 012200Z 21006KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 012100Z 21007KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 012000Z 21007KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 011900Z 22007KT 9999 SCT040 BKN120 09/03 Q1027 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 011800Z 21007KT 9999 SCT040 BKN120 09/02 Q1027 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 011700Z 23008KT 9999 SCT040 BKN150 09/02 Q1027 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 011600Z 21008KT 9999 BKN040 09/01 Q1028 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 011500Z 21007KT 9999 BKN040 09/01 Q1028 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 011400Z 19006KT 9999 BKN040 09/M00 Q1029 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 011300Z 20005KT 9000 BKN040 08/01 Q1029 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 011200Z 22004KT 8000 BKN040 08/01 Q1030 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 011100Z 21006KT 9999 BKN040 07/M00 Q1030 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 011000Z 20007KT 9999 BKN040 08/M00 Q1030 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 010900Z 25007KT 9999 BKN035 08/01 Q1031 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 010800Z 25008KT 9999 BKN035 09/01 Q1030 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 010700Z 24005KT 210V270 9999 BKN030 09/01 Q1030
               NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 010600Z 30004KT 260V340 9999 BKN030 09/01 Q1031
               NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 010500Z 28004KT 250V330 9999 BKN030 09/01 Q1031
               NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 010400Z 25003KT 9999 BKN035 09/00 Q1032 NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 010300Z 31003KT 250V350 9999 BKN035 09/01 Q1033
               NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 010200Z 31004KT 270V340 9999 BKN035 09/00 Q1034
               NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 010100Z 20004KT 170V240 9000 BKN035 08/00 Q1034
               NOSIG=
     										
     									
     									</td>, <td class="txt_l">
     									
     										
     										
     											METAR RKPC 010000Z 20005KT 7000 BKN030 07/01 Q1034 NOSIG=
     										
     									
     									</td>]
for content in contents:
    print(" ".join(content.get_text().strip().split()))
METAR RKPC 012300Z 21006KT 9999 FEW050 BKN120 11/03 Q1026 NOSIG=
METAR RKPC 012200Z 21006KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=
METAR RKPC 012100Z 21007KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=
METAR RKPC 012000Z 21007KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=
METAR RKPC 011900Z 22007KT 9999 SCT040 BKN120 09/03 Q1027 NOSIG=
METAR RKPC 011800Z 21007KT 9999 SCT040 BKN120 09/02 Q1027 NOSIG=
METAR RKPC 011700Z 23008KT 9999 SCT040 BKN150 09/02 Q1027 NOSIG=
METAR RKPC 011600Z 21008KT 9999 BKN040 09/01 Q1028 NOSIG=
METAR RKPC 011500Z 21007KT 9999 BKN040 09/01 Q1028 NOSIG=
METAR RKPC 011400Z 19006KT 9999 BKN040 09/M00 Q1029 NOSIG=
METAR RKPC 011300Z 20005KT 9000 BKN040 08/01 Q1029 NOSIG=
METAR RKPC 011200Z 22004KT 8000 BKN040 08/01 Q1030 NOSIG=
METAR RKPC 011100Z 21006KT 9999 BKN040 07/M00 Q1030 NOSIG=
METAR RKPC 011000Z 20007KT 9999 BKN040 08/M00 Q1030 NOSIG=
METAR RKPC 010900Z 25007KT 9999 BKN035 08/01 Q1031 NOSIG=
METAR RKPC 010800Z 25008KT 9999 BKN035 09/01 Q1030 NOSIG=
METAR RKPC 010700Z 24005KT 210V270 9999 BKN030 09/01 Q1030 NOSIG=
METAR RKPC 010600Z 30004KT 260V340 9999 BKN030 09/01 Q1031 NOSIG=
METAR RKPC 010500Z 28004KT 250V330 9999 BKN030 09/01 Q1031 NOSIG=
METAR RKPC 010400Z 25003KT 9999 BKN035 09/00 Q1032 NOSIG=
METAR RKPC 010300Z 31003KT 250V350 9999 BKN035 09/01 Q1033 NOSIG=
METAR RKPC 010200Z 31004KT 270V340 9999 BKN035 09/00 Q1034 NOSIG=
METAR RKPC 010100Z 20004KT 170V240 9000 BKN035 08/00 Q1034 NOSIG=
METAR RKPC 010000Z 20005KT 7000 BKN030 07/01 Q1034 NOSIG=
for content in contents:
    metar_list.append(" ".join(content.get_text().strip().split()))
metar_list
['METAR RKPC 012300Z 21006KT 9999 FEW050 BKN120 11/03 Q1026 NOSIG=',
 'METAR RKPC 012200Z 21006KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=',
 'METAR RKPC 012100Z 21007KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=',
 'METAR RKPC 012000Z 21007KT 9999 SCT040 BKN120 10/03 Q1026 NOSIG=',
 'METAR RKPC 011900Z 22007KT 9999 SCT040 BKN120 09/03 Q1027 NOSIG=',
 'METAR RKPC 011800Z 21007KT 9999 SCT040 BKN120 09/02 Q1027 NOSIG=',
 'METAR RKPC 011700Z 23008KT 9999 SCT040 BKN150 09/02 Q1027 NOSIG=',
 'METAR RKPC 011600Z 21008KT 9999 BKN040 09/01 Q1028 NOSIG=',
 'METAR RKPC 011500Z 21007KT 9999 BKN040 09/01 Q1028 NOSIG=',
 'METAR RKPC 011400Z 19006KT 9999 BKN040 09/M00 Q1029 NOSIG=',
 'METAR RKPC 011300Z 20005KT 9000 BKN040 08/01 Q1029 NOSIG=',
 'METAR RKPC 011200Z 22004KT 8000 BKN040 08/01 Q1030 NOSIG=',
 'METAR RKPC 011100Z 21006KT 9999 BKN040 07/M00 Q1030 NOSIG=',
 'METAR RKPC 011000Z 20007KT 9999 BKN040 08/M00 Q1030 NOSIG=',
 'METAR RKPC 010900Z 25007KT 9999 BKN035 08/01 Q1031 NOSIG=',
 'METAR RKPC 010800Z 25008KT 9999 BKN035 09/01 Q1030 NOSIG=',
 'METAR RKPC 010700Z 24005KT 210V270 9999 BKN030 09/01 Q1030 NOSIG=',
 'METAR RKPC 010600Z 30004KT 260V340 9999 BKN030 09/01 Q1031 NOSIG=',
 'METAR RKPC 010500Z 28004KT 250V330 9999 BKN030 09/01 Q1031 NOSIG=',
 'METAR RKPC 010400Z 25003KT 9999 BKN035 09/00 Q1032 NOSIG=',
 'METAR RKPC 010300Z 31003KT 250V350 9999 BKN035 09/01 Q1033 NOSIG=',
 'METAR RKPC 010200Z 31004KT 270V340 9999 BKN035 09/00 Q1034 NOSIG=',
 'METAR RKPC 010100Z 20004KT 170V240 9000 BKN035 08/00 Q1034 NOSIG=',
 'METAR RKPC 010000Z 20005KT 7000 BKN030 07/01 Q1034 NOSIG=']
df_metar = pd.DataFrame(metar_list, columns = ["metar_raw"])
df_metar
metar_raw
0 METAR RKPC 012300Z 21006KT 9999 FEW050 BKN120 ...
1 METAR RKPC 012200Z 21006KT 9999 SCT040 BKN120 ...
2 METAR RKPC 012100Z 21007KT 9999 SCT040 BKN120 ...
3 METAR RKPC 012000Z 21007KT 9999 SCT040 BKN120 ...
4 METAR RKPC 011900Z 22007KT 9999 SCT040 BKN120 ...
5 METAR RKPC 011800Z 21007KT 9999 SCT040 BKN120 ...
6 METAR RKPC 011700Z 23008KT 9999 SCT040 BKN150 ...
7 METAR RKPC 011600Z 21008KT 9999 BKN040 09/01 Q...
8 METAR RKPC 011500Z 21007KT 9999 BKN040 09/01 Q...
9 METAR RKPC 011400Z 19006KT 9999 BKN040 09/M00 ...
10 METAR RKPC 011300Z 20005KT 9000 BKN040 08/01 Q...
11 METAR RKPC 011200Z 22004KT 8000 BKN040 08/01 Q...
12 METAR RKPC 011100Z 21006KT 9999 BKN040 07/M00 ...
13 METAR RKPC 011000Z 20007KT 9999 BKN040 08/M00 ...
14 METAR RKPC 010900Z 25007KT 9999 BKN035 08/01 Q...
15 METAR RKPC 010800Z 25008KT 9999 BKN035 09/01 Q...
16 METAR RKPC 010700Z 24005KT 210V270 9999 BKN030...
17 METAR RKPC 010600Z 30004KT 260V340 9999 BKN030...
18 METAR RKPC 010500Z 28004KT 250V330 9999 BKN030...
19 METAR RKPC 010400Z 25003KT 9999 BKN035 09/00 Q...
20 METAR RKPC 010300Z 31003KT 250V350 9999 BKN035...
21 METAR RKPC 010200Z 31004KT 270V340 9999 BKN035...
22 METAR RKPC 010100Z 20004KT 170V240 9000 BKN035...
23 METAR RKPC 010000Z 20005KT 7000 BKN030 07/01 Q...


공항 여러 개

# metar 페이지 접근
detail = {'rUri': '/aftnwafsmetar/MetarList.dn',
          'filepath': 'server.acdb.airstcs.pdf.filepath',
          'pageType': 'MESSAGE',
          'tmCheck': 'on',
          'tmSt': start_date,
          'tmEd': end_date,
          'tbType': 'AFTN',
          'stnCd': airport_total}

url_metar = "https://global.amo.go.kr/aftnwafsmetar/MetarList.do"
res = session.post(url_metar, data = detail)
print(res.text)
    c:\users\kmosh\appdata\local\programs\python\python37\lib\site-packages\urllib3\connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
      InsecureRequestWarning)
    IOPub data rate exceeded.
    The notebook server will temporarily stop sending output
    to the client in order to avoid crashing it.
    To change this limit, set the config variable
    `--NotebookApp.iopub_data_rate_limit`.
    
    Current values:
    NotebookApp.iopub_data_rate_limit=1000000.0 (bytes/sec)
    NotebookApp.rate_limit_window=3.0 (secs)
soup = BeautifulSoup(res.text, "html.parser")
metar_mes = soup.find("div", {"id":"messageMetarDiv"})
metar_mes
    <div class="con_all2" id="messageMetarDiv" style=" display: none;">
    <div class="dataT">
    <table border="1" id="contentsTb2" style="table-layout:fixed; float:left;" width="99%">
    <colgroup>
    <col width="100%"/>
    </colgroup>
    <tbody>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKSS 312300Z 01004KT CAVOK M07/M12 Q1028 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKSS 312200Z 33001KT CAVOK M07/M12 Q1027 NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKSS 312100Z 28002KT 9999 FEW035 SCT180 M06/M12 Q1027
              NOSIG=
    										
    									
    									</td>
    </tr>
    <tr>
    <td class="txt_l">
    									
    										
    										
    											METAR RKSS 312000Z 31001KT 9999 FEW035 SCT180 M06/M11 Q1027
              NOSIG=
    										
    									
    									</td>
    </tr>
      
     
    # ... 
    # 중간 생략
    # ...		
     
     									
     									</td>, ...]
metar_list = []

for content in contents:
    metar_list.append(" ".join(content.get_text().strip().split()))
df_metar = pd.DataFrame(metar_list, columns = ["metar_raw"])
df_metar
metar_raw
0 METAR RKSS 312300Z 01004KT CAVOK M07/M12 Q1028...
1 METAR RKSS 312200Z 33001KT CAVOK M07/M12 Q1027...
2 METAR RKSS 312100Z 28002KT 9999 FEW035 SCT180 ...
3 METAR RKSS 312000Z 31001KT 9999 FEW035 SCT180 ...
4 METAR RKSS 311900Z 30002KT CAVOK M07/M12 Q1027...
5 METAR RKSS 311800Z 33002KT CAVOK M07/M11 Q1028...
6 METAR RKSS 311700Z 01001KT CAVOK M08/M12 Q1027...
7 METAR RKSS 311600Z 33001KT CAVOK M08/M14 Q1028...
8 METAR RKSS 311500Z 00000KT CAVOK M07/M14 Q1028...
9 METAR RKSS 311400Z 01002KT CAVOK M06/M15 Q1028...
10 METAR RKSS 311300Z 31005KT CAVOK M07/M14 Q1028...
11 METAR RKSS 311200Z 29002KT CAVOK M05/M14 Q1028...
12 METAR RKSS 311100Z 03002KT CAVOK M04/M16 Q1028...
13 METAR RKSS 311000Z 32004KT CAVOK M03/M18 Q1028...
14 METAR RKSS 310900Z 33005KT CAVOK M04/M16 Q1028...
15 METAR RKSS 310800Z 33006KT CAVOK M02/M17 Q1028...
16 METAR RKSS 310700Z 35006KT CAVOK M02/M16 Q1027...
17 METAR RKSS 310600Z 34005KT 310V010 CAVOK M02/M...
18 METAR RKSS 310500Z 36005KT 310V020 CAVOK M02/M...
19 METAR RKSS 310400Z 31005KT CAVOK M04/M20 Q1029...
20 METAR RKSS 310300Z 33004KT 310V020 CAVOK M04/M...
21 METAR RKSS 310200Z 32002KT CAVOK M05/M16 Q1031...
22 METAR RKSS 310100Z 02004KT 350V050 CAVOK M07/M...
23 METAR RKSS 310000Z 34004KT CAVOK M09/M14 Q1032...
24 METAR RKSS 302300Z 35003KT CAVOK M11/M16 Q1031...
25 METAR RKSS 302200Z 32004KT CAVOK M11/M16 Q1031...
26 METAR RKSS 302100Z 04002KT CAVOK M11/M16 Q1030...
27 METAR RKSS 302000Z 31002KT CAVOK M12/M16 Q1031...
28 METAR RKSS 301900Z 08003KT CAVOK M10/M17 Q1030...
29 METAR RKSS 301800Z 33003KT CAVOK M11/M17 Q1031...
... ...
12999 METAR RKSI 011400Z 18006KT 6000 BKN030 08/05 Q...
13000 METAR RKSI 011330Z 19005KT 160V220 6000 BKN030...
13001 METAR RKSI 011300Z 18005KT 6000 BKN030 07/04 Q...
13002 METAR RKSI 011230Z 16006KT 6000 BKN030 07/03 Q...
13003 METAR RKSI 011200Z 19006KT 140V220 6000 BKN030...
13004 METAR RKSI 011130Z 13005KT 5000 BR SCT030 05/0...
13005 METAR RKSI 011100Z 14003KT 5000 BR SCT030 05/0...
13006 METAR RKSI 011030Z 11001KT 5000 BR SCT030 06/0...
13007 METAR RKSI 011000Z 13003KT 5000 BR SCT030 06/0...
13008 METAR RKSI 010930Z 14003KT 5000 BR SCT030 06/0...
13009 METAR RKSI 010900Z 13005KT 5000 BR SCT030 07/0...
13010 METAR RKSI 010830Z 14004KT 6000 SCT030 07/03 Q...
13011 METAR RKSI 010800Z 14005KT 6000 SCT030 08/04 Q...
13012 METAR RKSI 010730Z 15005KT 6000 SCT030 08/03 Q...
13013 METAR RKSI 010700Z 15005KT 5000 BR SCT030 08/0...
13014 METAR RKSI 010630Z 14003KT 110V170 5000 BR SCT...
13015 METAR RKSI 010600Z 16004KT 100V220 5000 BR SCT...
13016 METAR RKSI 010530Z 15004KT 110V220 5000 BR SCT...
13017 METAR RKSI 010500Z 16004KT 130V200 5000 BR SCT...
13018 METAR RKSI 010430Z 16006KT 130V190 4500 BR SCT...
13019 METAR RKSI 010400Z 16008KT 4500 BR SCT030 07/0...
13020 METAR RKSI 010330Z 16009KT 3500 BR SCT030 06/0...
13021 METAR RKSI NIL=
13022 METAR RKSI 010300Z 14008KT 3500 BR SCT030 06/0...
13023 METAR RKSI 010230Z 13008KT 3500 BR SCT030 05/0...
13024 METAR RKSI 010200Z 14007KT 070V160 2500 BR SCT...
13025 METAR RKSI 010130Z 14008KT 2000 BR SCT030 04/0...
13026 METAR RKSI 010100Z 14008KT 080V160 2000 BR SCT...
13027 METAR RKSI 010030Z 13005KT 1800 BR BKN030 03/0...
13028 METAR RKSI 010000Z 13005KT 1800 R15L/1700U R15...

13029 rows × 1 columns

# 첫 열 검증
df_metar["metar_raw"][0] == 'METAR RKSS 012300Z 15006KT 8000 SCT030 M01/M04 Q1024 NOSIG='
True
# 마지막 열 검증
df_metar["metar_raw"][407] == 'METAR RKSI 010000Z 12005KT 2000 BR SCT030 00/M02 Q1033 NOSIG='
True


크롤러 제작

# start - 2017.01.01 00:00 ~ 2019.06.01 00:00 (총 30개)
start_list = ['2017.01.01 00:00', '2017.02.01 00:00', '2017.03.01 00:00', '2017.04.01 00:00', '2017.05.01 00:00', '2017.06.01 00:00',
              '2017.07.01 00:00', '2017.08.01 00:00', '2017.09.01 00:00', '2017.10.01 00:00', '2017.11.01 00:00', '2017.12.01 00:00',
              '2018.01.01 00:00', '2018.02.01 00:00', '2018.03.01 00:00', '2018.04.01 00:00', '2018.05.01 00:00', '2018.06.01 00:00',
              '2018.07.01 00:00', '2018.08.01 00:00', '2018.09.01 00:00', '2018.10.01 00:00', '2018.11.01 00:00', '2018.12.01 00:00',
              '2019.01.01 00:00', '2019.02.01 00:00', '2019.03.01 00:00', '2019.04.01 00:00', '2019.05.01 00:00', '2019.06.01 00:00']

# end - 2017.01.31 23:59 ~ 2019.06.30 23:59 (총 30개)
end_list = ['2017.01.31 23:59', '2017.02.28 23:59', '2017.03.31 23:59', '2017.04.30 23:59', '2017.05.31 23:59', '2017.06.30 23:59',
            '2017.07.31 23:59', '2017.08.31 23:59', '2017.09.30 23:59', '2017.10.31 23:59', '2017.11.30 23:59', '2017.12.31 23:59',
            '2018.01.31 23:59', '2018.02.28 23:59', '2018.03.31 23:59', '2018.04.30 23:59', '2018.05.31 23:59', '2018.06.30 23:59',
            '2018.07.31 23:59', '2018.08.31 23:59', '2018.09.30 23:59', '2018.10.31 23:59', '2018.11.30 23:59', '2018.12.31 23:59',
            '2019.01.31 23:59', '2019.02.28 23:59', '2019.03.31 23:59', '2019.04.30 23:59', '2019.05.31 23:59', '2019.06.30 23:59']

# 검색할 공항 코드
airport_total = 'RKSS, RKPK, RKPC, RKTN, RKPU, RKTU, RKJB, RKJJ, RKJY, RKNY, RKTH, RKPS, RKJK, RKNW, RKSI'

# 모든 데이터프레임 저장
df_total = pd.DataFrame(columns = ["metar_raw"])
for month in range(len(start_list)):
    # 세션 시작
    session = requests.session()

    # 로그인하기
    login_info = {'role': 'AMI0002',
                  'pwd': 'f4IDn1Qlt+8FXjR3ypy/OhHlPSo96602rt2W5ZrkiS0=',
                  'loginId': '********',
                  'password': '********',
                  'x': '0',
                  'y': '0'}

    url_login = 'https://global.amo.go.kr/common/login/LoginConfirmAcwis.do'
    res = session.post(url_login, data = login_info, verify = False)
    
    # metar 페이지 접근
    detail = {'rUri': '/aftnwafsmetar/MetarList.dn',
              'filepath': 'server.acdb.airstcs.pdf.filepath',
              'pageType': 'MESSAGE',
              'tmCheck': 'on',
              'tmSt': start_list[month],
              'tmEd': end_list[month],
              'tbType': 'AFTN',
              'stnCd': airport_total}

    url_metar = "https://global.amo.go.kr/aftnwafsmetar/MetarList.do"
    res = session.post(url_metar, data = detail)
    
    soup = BeautifulSoup(res.text, "html.parser")
    metar_mes = soup.find("div", {"id":"messageMetarDiv"})
    contents = metar_mes.find_all("td", {"class":"txt_l"})
    
    metar_list = []

    for content in contents:
        metar_list.append(" ".join(content.get_text().strip().split()))
        
    df_metar = pd.DataFrame(metar_list, columns = ["metar_raw"])
    
    df_total = df_total.append(df_metar, ignore_index = True)
df_total.shape
(424807, 1)
df_total.head()
metar_raw
0 METAR RKSS 312300Z 01004KT CAVOK M07/M12 Q1028...
1 METAR RKSS 312200Z 33001KT CAVOK M07/M12 Q1027...
2 METAR RKSS 312100Z 28002KT 9999 FEW035 SCT180 ...
3 METAR RKSS 312000Z 31001KT 9999 FEW035 SCT180 ...
4 METAR RKSS 311900Z 30002KT CAVOK M07/M12 Q1027...
df_total.tail()
metar_raw
424802 METAR RKSI 010130Z 22008KT 180V240 9999 SCT010...
424803 METAR RKSI 010100Z 22007KT 180V260 9999 FEW015...
424804 METAR RKSO 010100Z 14001KT 9000 HZ SCT030 BKN2...
424805 METAR RKSI 010030Z 23009KT 200V260 9999 FEW010...
424806 METAR RKSI 010000Z 24006KT 200V270 9999 BKN010...
df_total.to_csv('data/metar_total.csv', index = False)
pd.read_csv('data/metar_total.csv')
metar_raw
0 METAR RKSS 312300Z 01004KT CAVOK M07/M12 Q1028...
1 METAR RKSS 312200Z 33001KT CAVOK M07/M12 Q1027...
2 METAR RKSS 312100Z 28002KT 9999 FEW035 SCT180 ...
3 METAR RKSS 312000Z 31001KT 9999 FEW035 SCT180 ...
4 METAR RKSS 311900Z 30002KT CAVOK M07/M12 Q1027...
5 METAR RKSS 311800Z 33002KT CAVOK M07/M11 Q1028...
6 METAR RKSS 311700Z 01001KT CAVOK M08/M12 Q1027...
7 METAR RKSS 311600Z 33001KT CAVOK M08/M14 Q1028...
8 METAR RKSS 311500Z 00000KT CAVOK M07/M14 Q1028...
9 METAR RKSS 311400Z 01002KT CAVOK M06/M15 Q1028...
10 METAR RKSS 311300Z 31005KT CAVOK M07/M14 Q1028...
11 METAR RKSS 311200Z 29002KT CAVOK M05/M14 Q1028...
12 METAR RKSS 311100Z 03002KT CAVOK M04/M16 Q1028...
13 METAR RKSS 311000Z 32004KT CAVOK M03/M18 Q1028...
14 METAR RKSS 310900Z 33005KT CAVOK M04/M16 Q1028...
15 METAR RKSS 310800Z 33006KT CAVOK M02/M17 Q1028...
16 METAR RKSS 310700Z 35006KT CAVOK M02/M16 Q1027...
17 METAR RKSS 310600Z 34005KT 310V010 CAVOK M02/M...
18 METAR RKSS 310500Z 36005KT 310V020 CAVOK M02/M...
19 METAR RKSS 310400Z 31005KT CAVOK M04/M20 Q1029...
20 METAR RKSS 310300Z 33004KT 310V020 CAVOK M04/M...
21 METAR RKSS 310200Z 32002KT CAVOK M05/M16 Q1031...
22 METAR RKSS 310100Z 02004KT 350V050 CAVOK M07/M...
23 METAR RKSS 310000Z 34004KT CAVOK M09/M14 Q1032...
24 METAR RKSS 302300Z 35003KT CAVOK M11/M16 Q1031...
25 METAR RKSS 302200Z 32004KT CAVOK M11/M16 Q1031...
26 METAR RKSS 302100Z 04002KT CAVOK M11/M16 Q1030...
27 METAR RKSS 302000Z 31002KT CAVOK M12/M16 Q1031...
28 METAR RKSS 301900Z 08003KT CAVOK M10/M17 Q1030...
29 METAR RKSS 301800Z 33003KT CAVOK M11/M17 Q1031...
... ...
424777 METAR RKSI 010830Z 30005KT 210V360 CAVOK 19/11...
424778 METAR RKSI 010800Z 26003KT 360V070 CAVOK 19/10...
424779 SPECI RKPS 010737Z 22008KT CAVOK 25/11 Q1009 R...
424780 METAR RKSI 010730Z 21007KT 180V240 CAVOK 18/10...
424781 METAR RKSI 010700Z 23008KT 200V270 CAVOK 19/10...
424782 METAR RKSI 010630Z 22008KT 180V250 9999 FEW045...
424783 METAR RKSO 010600Z 24003KT 9000 HZ BKN200 23/1...
424784 METAR RKSI 010600Z 23010KT 200V260 CAVOK 19/09...
424785 METAR RKSI 010530Z 21011KT 180V240 CAVOK 19/09...
424786 METAR RKSI 010500Z 21009KT 160V240 CAVOK 19/10...
424787 METAR RKPK 010500Z 18012KT CAVOK 25/12 Q1009 R...
424788 METAR RKPK 010500Z 18012KT CAVOK 25/12 Q1009=
424789 METAR RKSO 010500Z 25003KT 9000 HZ BKN200 22/1...
424790 METAR RKSI 010430Z 22008KT 170V250 CAVOK 19/10...
424791 METAR RKNW 010400Z 21006KT 9999 BKN200 23/12 A...
424792 METAR RKSO 010400Z 33005KT 8000 HZ BKN200 22/1...
424793 METAR RKSI 010400Z 22007KT 180V260 9999 FEW040...
424794 METAR RKSI 010330Z 21006KT 180V260 9999 FEW020...
424795 METAR RKSM 010300Z 23006KT 9999 FEW030 BKN200 ...
424796 METAR RKSO 010300Z 30006KT 8000 HZ SCT030 BKN2...
424797 METAR RKSM 010300Z 23006KT 9999 FEW030 BKN200 ...
424798 METAR RKSI 010300Z 21006KT 160V310 9999 FEW015...
424799 METAR RKSI 010230Z 23009KT 180V250 9999 FEW015...
424800 METAR RKSI 010200Z 22008KT 9999 FEW015 SCT025 ...
424801 METAR RKSO 010200Z 28007KT 9000 HZ SCT030 BKN2...
424802 METAR RKSI 010130Z 22008KT 180V240 9999 SCT010...
424803 METAR RKSI 010100Z 22007KT 180V260 9999 FEW015...
424804 METAR RKSO 010100Z 14001KT 9000 HZ SCT030 BKN2...
424805 METAR RKSI 010030Z 23009KT 200V260 9999 FEW010...
424806 METAR RKSI 010000Z 24006KT 200V270 9999 BKN010...

424807 rows × 1 columns

중간 중간에 보이는 다른 icao 코드는 군사 목적 공항 등 15개 이외의 공항의 코드임
RKSO: 오산공군기지
RKSM: 서울공항

  • 제일 아래에 append된 2019년 6월 자료의 경우, RKSI(인천) 자료 중간 중간에 RKNW(원주), RKPK(청주)가 끼어 순서가 약간 뒤섞임
  • metar/taf 조회 페이지에서 수동으로 2019년 6월 전체 조회 해봐도 같은 현상 발생
  • METAR 중간 중간에 SPECI도 들어있음


METAR로는 월별 구분이 안되므로 month 컬럼을 넣어 다시 크롤링

# start - 2017.01.01 00:00 ~ 2019.06.01 00:00 (총 30개)
start_list = ['2017.01.01 00:00', '2017.02.01 00:00', '2017.03.01 00:00', '2017.04.01 00:00', '2017.05.01 00:00', '2017.06.01 00:00',
              '2017.07.01 00:00', '2017.08.01 00:00', '2017.09.01 00:00', '2017.10.01 00:00', '2017.11.01 00:00', '2017.12.01 00:00',
              '2018.01.01 00:00', '2018.02.01 00:00', '2018.03.01 00:00', '2018.04.01 00:00', '2018.05.01 00:00', '2018.06.01 00:00',
              '2018.07.01 00:00', '2018.08.01 00:00', '2018.09.01 00:00', '2018.10.01 00:00', '2018.11.01 00:00', '2018.12.01 00:00',
              '2019.01.01 00:00', '2019.02.01 00:00', '2019.03.01 00:00', '2019.04.01 00:00', '2019.05.01 00:00', '2019.06.01 00:00']

# end - 2017.01.31 23:59 ~ 2019.06.30 23:59 (총 30개)
end_list = ['2017.01.31 23:59', '2017.02.28 23:59', '2017.03.31 23:59', '2017.04.30 23:59', '2017.05.31 23:59', '2017.06.30 23:59',
            '2017.07.31 23:59', '2017.08.31 23:59', '2017.09.30 23:59', '2017.10.31 23:59', '2017.11.30 23:59', '2017.12.31 23:59',
            '2018.01.31 23:59', '2018.02.28 23:59', '2018.03.31 23:59', '2018.04.30 23:59', '2018.05.31 23:59', '2018.06.30 23:59',
            '2018.07.31 23:59', '2018.08.31 23:59', '2018.09.30 23:59', '2018.10.31 23:59', '2018.11.30 23:59', '2018.12.31 23:59',
            '2019.01.31 23:59', '2019.02.28 23:59', '2019.03.31 23:59', '2019.04.30 23:59', '2019.05.31 23:59', '2019.06.30 23:59']

# 검색할 공항 코드
airport_total = 'RKSS, RKPK, RKPC, RKTN, RKPU, RKTU, RKJB, RKJJ, RKJY, RKNY, RKTH, RKPS, RKJK, RKNW, RKSI'

# 모든 데이터프레임 저장
df_metar_total = pd.DataFrame(columns = ["month", "metar_raw"])
df_metar_total
month metar_raw
for month in range(len(start_list)):
    # 세션 시작
    session = requests.session()

    # 로그인하기
    login_info = {'role': 'AMI0002',
                  'pwd': 'f4IDn1Qlt+8FXjR3ypy/OhHlPSo96602rt2W5ZrkiS0=',
                  'loginId': '********',
                  'password': '********',
                  'x': '0',
                  'y': '0'}

    url_login = 'https://global.amo.go.kr/common/login/LoginConfirmAcwis.do'
    res = session.post(url_login, data = login_info, verify = False)
    
    # metar 페이지 접근
    detail = {'rUri': '/aftnwafsmetar/MetarList.dn',
              'filepath': 'server.acdb.airstcs.pdf.filepath',
              'pageType': 'MESSAGE',
              'tmCheck': 'on',
              'tmSt': start_list[month],
              'tmEd': end_list[month],
              'tbType': 'AFTN',
              'stnCd': airport_total}

    url_metar = "https://global.amo.go.kr/aftnwafsmetar/MetarList.do"
    res = session.post(url_metar, data = detail)
    
    soup = BeautifulSoup(res.text, "html.parser")
    metar_mes = soup.find("div", {"id":"messageMetarDiv"})
    contents = metar_mes.find_all("td", {"class":"txt_l"})
    
    metar_list = []
    month_list = []
    
    for content in contents:
        metar_list.append(" ".join(content.get_text().strip().split()))
        month_list.append(start_list[month].split()[0].split(".")[0] + start_list[month].split()[0].split(".")[1])
        
    df_metar = pd.DataFrame({"month":month_list, "metar_raw":metar_list}, columns = ["month", "metar_raw"])
    
    df_metar_total = df_metar_total.append(df_metar, ignore_index = True)
df_metar_total.shape
(424807, 2)
df_metar_total.head()
month metar_raw
0 201701 METAR RKSS 312300Z 01004KT CAVOK M07/M12 Q1028...
1 201701 METAR RKSS 312200Z 33001KT CAVOK M07/M12 Q1027...
2 201701 METAR RKSS 312100Z 28002KT 9999 FEW035 SCT180 ...
3 201701 METAR RKSS 312000Z 31001KT 9999 FEW035 SCT180 ...
4 201701 METAR RKSS 311900Z 30002KT CAVOK M07/M12 Q1027...
df_metar_total.tail()
month metar_raw
424802 201906 METAR RKSI 010130Z 22008KT 180V240 9999 SCT010...
424803 201906 METAR RKSI 010100Z 22007KT 180V260 9999 FEW015...
424804 201906 METAR RKSO 010100Z 14001KT 9000 HZ SCT030 BKN2...
424805 201906 METAR RKSI 010030Z 23009KT 200V260 9999 FEW010...
424806 201906 METAR RKSI 010000Z 24006KT 200V270 9999 BKN010...
df_metar_total.to_csv('data/metar_total_month.csv', index = False)
pd.read_csv('data/metar_total_month.csv')
month metar_raw
0 201701 METAR RKSS 312300Z 01004KT CAVOK M07/M12 Q1028...
1 201701 METAR RKSS 312200Z 33001KT CAVOK M07/M12 Q1027...
2 201701 METAR RKSS 312100Z 28002KT 9999 FEW035 SCT180 ...
3 201701 METAR RKSS 312000Z 31001KT 9999 FEW035 SCT180 ...
4 201701 METAR RKSS 311900Z 30002KT CAVOK M07/M12 Q1027...
5 201701 METAR RKSS 311800Z 33002KT CAVOK M07/M11 Q1028...
6 201701 METAR RKSS 311700Z 01001KT CAVOK M08/M12 Q1027...
7 201701 METAR RKSS 311600Z 33001KT CAVOK M08/M14 Q1028...
8 201701 METAR RKSS 311500Z 00000KT CAVOK M07/M14 Q1028...
9 201701 METAR RKSS 311400Z 01002KT CAVOK M06/M15 Q1028...
10 201701 METAR RKSS 311300Z 31005KT CAVOK M07/M14 Q1028...
11 201701 METAR RKSS 311200Z 29002KT CAVOK M05/M14 Q1028...
12 201701 METAR RKSS 311100Z 03002KT CAVOK M04/M16 Q1028...
13 201701 METAR RKSS 311000Z 32004KT CAVOK M03/M18 Q1028...
14 201701 METAR RKSS 310900Z 33005KT CAVOK M04/M16 Q1028...
15 201701 METAR RKSS 310800Z 33006KT CAVOK M02/M17 Q1028...
16 201701 METAR RKSS 310700Z 35006KT CAVOK M02/M16 Q1027...
17 201701 METAR RKSS 310600Z 34005KT 310V010 CAVOK M02/M...
18 201701 METAR RKSS 310500Z 36005KT 310V020 CAVOK M02/M...
19 201701 METAR RKSS 310400Z 31005KT CAVOK M04/M20 Q1029...
20 201701 METAR RKSS 310300Z 33004KT 310V020 CAVOK M04/M...
21 201701 METAR RKSS 310200Z 32002KT CAVOK M05/M16 Q1031...
22 201701 METAR RKSS 310100Z 02004KT 350V050 CAVOK M07/M...
23 201701 METAR RKSS 310000Z 34004KT CAVOK M09/M14 Q1032...
24 201701 METAR RKSS 302300Z 35003KT CAVOK M11/M16 Q1031...
25 201701 METAR RKSS 302200Z 32004KT CAVOK M11/M16 Q1031...
26 201701 METAR RKSS 302100Z 04002KT CAVOK M11/M16 Q1030...
27 201701 METAR RKSS 302000Z 31002KT CAVOK M12/M16 Q1031...
28 201701 METAR RKSS 301900Z 08003KT CAVOK M10/M17 Q1030...
29 201701 METAR RKSS 301800Z 33003KT CAVOK M11/M17 Q1031...
... ... ...
424777 201906 METAR RKSI 010830Z 30005KT 210V360 CAVOK 19/11...
424778 201906 METAR RKSI 010800Z 26003KT 360V070 CAVOK 19/10...
424779 201906 SPECI RKPS 010737Z 22008KT CAVOK 25/11 Q1009 R...
424780 201906 METAR RKSI 010730Z 21007KT 180V240 CAVOK 18/10...
424781 201906 METAR RKSI 010700Z 23008KT 200V270 CAVOK 19/10...
424782 201906 METAR RKSI 010630Z 22008KT 180V250 9999 FEW045...
424783 201906 METAR RKSO 010600Z 24003KT 9000 HZ BKN200 23/1...
424784 201906 METAR RKSI 010600Z 23010KT 200V260 CAVOK 19/09...
424785 201906 METAR RKSI 010530Z 21011KT 180V240 CAVOK 19/09...
424786 201906 METAR RKSI 010500Z 21009KT 160V240 CAVOK 19/10...
424787 201906 METAR RKPK 010500Z 18012KT CAVOK 25/12 Q1009 R...
424788 201906 METAR RKPK 010500Z 18012KT CAVOK 25/12 Q1009=
424789 201906 METAR RKSO 010500Z 25003KT 9000 HZ BKN200 22/1...
424790 201906 METAR RKSI 010430Z 22008KT 170V250 CAVOK 19/10...
424791 201906 METAR RKNW 010400Z 21006KT 9999 BKN200 23/12 A...
424792 201906 METAR RKSO 010400Z 33005KT 8000 HZ BKN200 22/1...
424793 201906 METAR RKSI 010400Z 22007KT 180V260 9999 FEW040...
424794 201906 METAR RKSI 010330Z 21006KT 180V260 9999 FEW020...
424795 201906 METAR RKSM 010300Z 23006KT 9999 FEW030 BKN200 ...
424796 201906 METAR RKSO 010300Z 30006KT 8000 HZ SCT030 BKN2...
424797 201906 METAR RKSM 010300Z 23006KT 9999 FEW030 BKN200 ...
424798 201906 METAR RKSI 010300Z 21006KT 160V310 9999 FEW015...
424799 201906 METAR RKSI 010230Z 23009KT 180V250 9999 FEW015...
424800 201906 METAR RKSI 010200Z 22008KT 9999 FEW015 SCT025 ...
424801 201906 METAR RKSO 010200Z 28007KT 9000 HZ SCT030 BKN2...
424802 201906 METAR RKSI 010130Z 22008KT 180V240 9999 SCT010...
424803 201906 METAR RKSI 010100Z 22007KT 180V260 9999 FEW015...
424804 201906 METAR RKSO 010100Z 14001KT 9000 HZ SCT030 BKN2...
424805 201906 METAR RKSI 010030Z 23009KT 200V260 9999 FEW010...
424806 201906 METAR RKSI 010000Z 24006KT 200V270 9999 BKN010...

424807 rows × 2 columns