웹스크래핑 중 정규표현식 관련 질문입니다^^; 정보
웹스크래핑 중 정규표현식 관련 질문입니다^^;본문
다음 스포츠 웹사이트를 저희 사이트에 웹스크래핑(스크린 스크래핑)
하기위해서 정규표현식을 이용하여 값을 추출해오는데 몇일동안 못 풀고있어서
이렇게 질문드립니다 ㅜ_ㅜ;;
아시는분께서는 조언 또는 해답 남겨주시면 감사하겠습니다^^;
====================================================
다음 스포츠 코드 부분 (이 소스 중에서 값을 추출하게 됩니다.)
<div class="main_area result_record">
<div class="navigation"><a href="http://sports.media.daum.net/">스포츠홈</a></div>
<div class="result_calendar">
<div id="calendar"></div>
<script type="text/javascript">//<![CDATA[
var mcalendar = new MCalendar( $('calendar'), {
year:'2011',
month:'10',
day : '26',
isMarkGameDay : true,
markGameDayUrl : 'http://sports.media.daum.net/planus_proxy/planus/do/baseball/kbo/json/game_day.js',
onChange:function(){
var date = this.getYMD().split('.');
location.href = 'sbrd_main.daum?game_date='+date[0]+date[1]+date[2];
// alert(this.dateArray);
return;
}
})
//]]></script>
</div>
<div class="result_brd result_score_brd">
<a href="rec_main.daum?game_id=67854347" class="record_view">더보기</a>
<table class="score">
<tr>
<td class="t_logo1"><a href="../record/tinf_main.daum?team_id=384"><img src="http://i1.daumcdn.net/img-section/sports09/logo/team/kbo/SK_7063.gif" width="70" height="63" alt="" /></a></td>
<td class="t1">
<p>
<strong><a href="../record/tinf_main.daum?team_id=384">SK</a></strong><br />
</p>
</td>
<td class="s1"><div>
<span class="score_n"><script type="text/javascript">/*<![CDATA[*/document.write(createImgScore('1'));/*]]>*/</script></span>
</div></td>
<td class="vs">
<p class="state">종료 </p>
</td>
<td class="s2"><div>
<span class="score_n"><script type="text/javascript">/*<![CDATA[*/document.write(createImgScore('2'));/*]]>*/</script></span>
</div></td>
<td class="t2">
<p>
<strong><a href="../record/tinf_main.daum?team_id=383">삼성</a></strong><br />
</p>
</td>
<td class="t_logo2"><a href="../record/tinf_main.daum?team_id=383"><img src="http://i1.daumcdn.net/img-section/sports09/logo/team/kbo/SS_7063.gif" width="70" height="63" alt="" /></a></td>
</tr>
</table>
<div class="info">
<p>한국시리즈 2차전</p>
<p>대구시민운동장 야구장<em>18:00</em></p>
<p class="relation">
<span><a href="game_relation.daum?t1=383&t2=384">양팀 전적</a></span>
<span class="bar"><a href="game_relation.daum?t1=383">삼성 </a></span>
<span class="bar"><a href="game_relation.daum?t1=384">SK </a></span>
</p>
</div>
<table class="score_detail">
<col width="85" />
<col width="29" />
<col width="30" />
<col width="29" />
<col width="29" />
<col width="30" />
<col width="29" />
<col width="28" />
<col width="29" />
<col width="28" />
<col width="34" />
<col width="32" />
<col width="36" />
<col width="30" />
<col width="32" />
<col width="30" />
<col width="30" />
<col width="16" />
<tr>
<th></th>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
<th>8</th>
<th>9</th>
<th>10</th>
<th>11</th>
<th>12</th>
<th><strong>R</strong></th>
<th><strong>H</strong></th>
<th><strong>E</strong></th>
<th><strong>B</strong></th>
<th></th>
</tr>
<tr>
<td colspan="18" class="dummy"></td>
</tr>
<tr class="kbo">
<td class="kbo_team">SK</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td><em>-</em></td>
<td><em>-</em></td>
<td><em>-</em></td>
<td><strong>1</strong></td>
<td>7</td>
<td>1</td>
<td>3</td>
<td></td>
</tr>
<tr class="kbo">
<td class="kbo_team">삼성</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>2</td>
<td>0</td>
<td>0</td>
<td><em>-</em></td>
<td><em>-</em></td>
<td><em>-</em></td>
<td><em>-</em></td>
<td><strong>2</strong></td>
<td>6</td>
<td>1</td>
<td>5</td>
<td></td>
</tr>
</table>
</div>
<div class="errorcall">
<a href="http://cs.daum.net/mail/form/63.html?cat=10234" target="_blank" class="call" title="신고하기"></a>
<a href="#" onclick="window.scrollTo(0,0); return false;" class="top" title="맨위로"></a>
</div>
<script type="text/javascript">//<![CDATA[
recordTableNodata();
//]]>
</script> </div><!-- //main_area -->
====================================================
====================================================
제가 추출 성공한 소스
preg_match_all("/<td[^>]*class=[\"']t_logo1[\"']?[^>]*>(.*?)<\/td>/i",$txt,$match1);
$match1[1][0];
/* 변수 설명
$txt 는 추출대상인 다음 전체소스
$match1 은 담을 변수명
*/
성공한 소스 결과값
<td class="t_logo1"><a href="../record/tinf_main.daum?team_id=384"><img src="http://i1.daumcdn.net/img-section/sports09/logo/team/kbo/SK_7063.gif" width="70" height="63" alt="" /></a></td>
====================================================
위와 같은방식으로 테이블 부분 클래스 값을 이용하여 score_detail 테이블 전체 소스를 추출하려고 합니다
(td에서 table로 변경, 클래스 네임만 변경 했음)
preg_match_all("/<table[^>]*class=[\"']score_detail[\"']?[^>]*>(.*?)<\/table>/i",$txt,$match2);
$match2[1][0];
====================================================
table 내의 값을 모두 추출하려고 할때는 작동이 안됩니다.
두개의 차이점을 보니
위의 td의 경우엔 줄바꿈 공백 등이 없기에 작동이 되었고
아래의 table의 경우엔 줄바꿈 공백 탭 등이 있다는 것입니다.
/<table[^>]*class=[\"']score_detail[\"']?[^>]*>(.*?)<\/table>/i
그래서 이 부분 중 (.*?) <- 여기가 줄바꿈 공백 등이 포함되게 수정되어야 할 것 같은데 잘 안되네요 ㅜ.ㅜ;
답변 기다리겠습니다^^;
하기위해서 정규표현식을 이용하여 값을 추출해오는데 몇일동안 못 풀고있어서
이렇게 질문드립니다 ㅜ_ㅜ;;
아시는분께서는 조언 또는 해답 남겨주시면 감사하겠습니다^^;
====================================================
다음 스포츠 코드 부분 (이 소스 중에서 값을 추출하게 됩니다.)
<div class="main_area result_record">
<div class="navigation"><a href="http://sports.media.daum.net/">스포츠홈</a></div>
<div class="result_calendar">
<div id="calendar"></div>
<script type="text/javascript">//<![CDATA[
var mcalendar = new MCalendar( $('calendar'), {
year:'2011',
month:'10',
day : '26',
isMarkGameDay : true,
markGameDayUrl : 'http://sports.media.daum.net/planus_proxy/planus/do/baseball/kbo/json/game_day.js',
onChange:function(){
var date = this.getYMD().split('.');
location.href = 'sbrd_main.daum?game_date='+date[0]+date[1]+date[2];
// alert(this.dateArray);
return;
}
})
//]]></script>
</div>
<div class="result_brd result_score_brd">
<a href="rec_main.daum?game_id=67854347" class="record_view">더보기</a>
<table class="score">
<tr>
<td class="t_logo1"><a href="../record/tinf_main.daum?team_id=384"><img src="http://i1.daumcdn.net/img-section/sports09/logo/team/kbo/SK_7063.gif" width="70" height="63" alt="" /></a></td>
<td class="t1">
<p>
<strong><a href="../record/tinf_main.daum?team_id=384">SK</a></strong><br />
</p>
</td>
<td class="s1"><div>
<span class="score_n"><script type="text/javascript">/*<![CDATA[*/document.write(createImgScore('1'));/*]]>*/</script></span>
</div></td>
<td class="vs">
<p class="state">종료 </p>
</td>
<td class="s2"><div>
<span class="score_n"><script type="text/javascript">/*<![CDATA[*/document.write(createImgScore('2'));/*]]>*/</script></span>
</div></td>
<td class="t2">
<p>
<strong><a href="../record/tinf_main.daum?team_id=383">삼성</a></strong><br />
</p>
</td>
<td class="t_logo2"><a href="../record/tinf_main.daum?team_id=383"><img src="http://i1.daumcdn.net/img-section/sports09/logo/team/kbo/SS_7063.gif" width="70" height="63" alt="" /></a></td>
</tr>
</table>
<div class="info">
<p>한국시리즈 2차전</p>
<p>대구시민운동장 야구장<em>18:00</em></p>
<p class="relation">
<span><a href="game_relation.daum?t1=383&t2=384">양팀 전적</a></span>
<span class="bar"><a href="game_relation.daum?t1=383">삼성 </a></span>
<span class="bar"><a href="game_relation.daum?t1=384">SK </a></span>
</p>
</div>
<table class="score_detail">
<col width="85" />
<col width="29" />
<col width="30" />
<col width="29" />
<col width="29" />
<col width="30" />
<col width="29" />
<col width="28" />
<col width="29" />
<col width="28" />
<col width="34" />
<col width="32" />
<col width="36" />
<col width="30" />
<col width="32" />
<col width="30" />
<col width="30" />
<col width="16" />
<tr>
<th></th>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
<th>8</th>
<th>9</th>
<th>10</th>
<th>11</th>
<th>12</th>
<th><strong>R</strong></th>
<th><strong>H</strong></th>
<th><strong>E</strong></th>
<th><strong>B</strong></th>
<th></th>
</tr>
<tr>
<td colspan="18" class="dummy"></td>
</tr>
<tr class="kbo">
<td class="kbo_team">SK</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td><em>-</em></td>
<td><em>-</em></td>
<td><em>-</em></td>
<td><strong>1</strong></td>
<td>7</td>
<td>1</td>
<td>3</td>
<td></td>
</tr>
<tr class="kbo">
<td class="kbo_team">삼성</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>2</td>
<td>0</td>
<td>0</td>
<td><em>-</em></td>
<td><em>-</em></td>
<td><em>-</em></td>
<td><em>-</em></td>
<td><strong>2</strong></td>
<td>6</td>
<td>1</td>
<td>5</td>
<td></td>
</tr>
</table>
</div>
<div class="errorcall">
<a href="http://cs.daum.net/mail/form/63.html?cat=10234" target="_blank" class="call" title="신고하기"></a>
<a href="#" onclick="window.scrollTo(0,0); return false;" class="top" title="맨위로"></a>
</div>
<script type="text/javascript">//<![CDATA[
recordTableNodata();
//]]>
</script> </div><!-- //main_area -->
====================================================
====================================================
제가 추출 성공한 소스
preg_match_all("/<td[^>]*class=[\"']t_logo1[\"']?[^>]*>(.*?)<\/td>/i",$txt,$match1);
$match1[1][0];
/* 변수 설명
$txt 는 추출대상인 다음 전체소스
$match1 은 담을 변수명
*/
성공한 소스 결과값
<td class="t_logo1"><a href="../record/tinf_main.daum?team_id=384"><img src="http://i1.daumcdn.net/img-section/sports09/logo/team/kbo/SK_7063.gif" width="70" height="63" alt="" /></a></td>
====================================================
위와 같은방식으로 테이블 부분 클래스 값을 이용하여 score_detail 테이블 전체 소스를 추출하려고 합니다
(td에서 table로 변경, 클래스 네임만 변경 했음)
preg_match_all("/<table[^>]*class=[\"']score_detail[\"']?[^>]*>(.*?)<\/table>/i",$txt,$match2);
$match2[1][0];
====================================================
table 내의 값을 모두 추출하려고 할때는 작동이 안됩니다.
두개의 차이점을 보니
위의 td의 경우엔 줄바꿈 공백 등이 없기에 작동이 되었고
아래의 table의 경우엔 줄바꿈 공백 탭 등이 있다는 것입니다.
/<table[^>]*class=[\"']score_detail[\"']?[^>]*>(.*?)<\/table>/i
그래서 이 부분 중 (.*?) <- 여기가 줄바꿈 공백 등이 포함되게 수정되어야 할 것 같은데 잘 안되네요 ㅜ.ㅜ;
답변 기다리겠습니다^^;
추천
0
0
댓글 4개

<table[^>]* 로 만족할것 같은데 여기는 질문게시판이 아니라서 답변은 여기까지만 합니다. ㅠㅠ

참신합니다.

/is 로 되는것 같네요.
아... 대박..
관리자님 진짜 신이다..
/is 이걸로 바로해결.... 쩐당...
관리자님 진짜 신이다..
/is 이걸로 바로해결.... 쩐당...