2014-08-04 1 views
0

에 적용합니다. 간단한 HTML 돔 파서를 배우려고하는데 소개로 ESPN's college football score webpage을 구문 분석하고 일반 HTML 테이블로 변환하려고합니다. 나는 지금까지 날짜를 가져 오는 것 외에는 모든 것을 할 수 있었다. 제가하는 데 문제는 데이터가 다음과 같이 구성되어 있다는 것입니다 :Divs 외부의 요소를 구문 분석하여 Divs (단순 HTML 돔 파서)

<div class=gameDay-Container> 
    <h4 class="games-date">Thursday, August 28 2014</h4> 
    <div class=mod-ncf-scorebox> Containing games that I have scraped, which I want to add the date (Aug 28) to </div> 
    <h4 class="games-date">Friday, August 29 2014</h4> 
    <div class=mod-ncf-scorebox> containing the next games that I will scrape, which I want the date (Aug 29) appended to </div> 
</div> 

상단 부분의 배열로 각 날짜 내에서 게임과 장소를 수에 대한 긁힌 자국, 다음 하단 섹션에 대한 데이터를 컴파일 탁자. (? 이것은 내가 시행 착오를 통해 그것을 쓰기로 지저분한이며,이 작업을 수행 할 수있는 쉬운 방법이있다)

foreach($html_base->find('.gameDay-Container') as $dates) { 
    $rows = $dates->find('.mod-ncf-scorebox'); 
    $count = count($rows); 
    $supercount=$count.','; 

    $megacount=explode(', ',$supercount); 

    print_r($megacount); 
} 

foreach($html_base->find('.mod-ncf-scorebox') as $event) { 
    $item['Date'] = ''; 
    $item['Away Team'] = $event->find('.team-name', 0)->plaintext; 
    $item['Away Team'] = substr($item['Away Team'], 0, -1); 
    $item['Away Score'] = $event->find('li.finalScore', 1); 
    $item['Home Team'] = $event->find('.team-name', 1)->plaintext; 
    $item['Home Team'] = substr($item['Home Team'], 0, -1); 
    $item['Home Score'] = $event->find('li.finalScore', 2)->plaintext; 
    $item['Game Status'] = $event->find('div.game-status', 0)->plaintext; 
    $item['Game ID'] = $event->find('p', 0)->id; 
    $item['Game ID'] = substr($item['Game ID'], 0, strpos($item['Game ID'], '-')); 
    $item['Week'] = $week; 
    $item['League'] = 'NCAA Football'; 

    $NCAAFscores[] = $item; 
} 

질문 : 나는 게임의 날짜가 내 각 라인에 추가 할 수 있습니다 탁자? 배열 설정을 사용해야하는 경우, 그 값을 가져 와서 일종의 계산을 할 수 있습니까? 내가 간과하고있는 쉬운 방법이 있습니까?

대답 아래

당 Enissay의 제안, 나는 완벽하게 이루신의 foreach 문을 중첩. 여기에 비슷한 것들이있는 코드의 마지막 스 니펫이 있습니다.

foreach($html_base->find('.gameDay-Container') as $event2) { 

    $date1 = $event2->prev_sibling()->plaintext; 
    $date2 = new DateTime($date1); 
    $ymd = ($date2->format('Y-m-d')); 


    foreach($event2->find('.mod-ncf-scorebox') as $event) { 
     $item['Date']  = $ymd; 
     $item['Away Team']  = $event->find('.team-name', 0)->plaintext; 
     $item['Away Team'] = substr($item['Away Team'], 0, -1); 
     $item['Away Score']  = $event->find('li.finalScore', 1); 
     $item['Home Team']  = $event->find('.team-name', 1)->plaintext; 
     $item['Home Team'] = substr($item['Home Team'], 0, -1); 
     $item['Home Score']  = $event->find('li.finalScore', 2)->plaintext; 
     $item['Game Status'] = $event->find('div.game-status', 0)->plaintext; 
     $item['Game ID'] = $event->find('p', 0)->id; 
     $item['Game ID'] = substr($item['Game ID'], 0, strpos($item['Game ID'], '-')); 
     $item['Week'] = $week; 
     $item['League'] = 'NCAA Football'; 

     $NCAAFscores[] = $item; 

}

}

+0

[strtotime()'] (http://codepad.org/2faiwsfV)를 사용하면 strtotime ($ event-> find ('. games-date', 0) -> 평문)'? –

답변

0

는 간단히 진행 방식을 변경 ...

enter image description here

이 따르

  1. 게임 아칸소 전자는 이러한 블록은 각 블록의 경우 $html_base->find('.gameDay-Container')

  2. 를 ▶ 가져 오기, div 블록/용기, 해당 날짜 덧붙일 각 그룹화, 당신은 당신이 그 블록

    안에 모든 게임을 찾을 다음 날짜 ▶ $block->prev_sibling()->plaintext;

  3. 를 얻을 수 있습니다

    foreach($block->find('.mod-ncf-scorebox') as $game) { ... }

는 테스트하지 만 작동합니다 :)