2012-09-23 2 views
1

안녕하세요 간단한 HTML DOM 파서를 사용하여 UFC 이벤트 일정을 긁어 내려고하고 있습니다.간단한 HTML DOM 파서로 스크랩

올바른 데이터를 선택하는 데 어려움을 겪고 있습니다.

제목, 이미지, 날짜, 시간을 원합니다. & 위치.

는 지금까지 내가

function scraping_ufc() { 
    // create HTML DOM 
    $html = file_get_html('http://uk.ufc.com/schedule/event/'); 

    // get news block 
    foreach($html->find('table tr') as $event) { 
     // get title 
     $item['title'] = trim($event->find('div[class="event-tagline"]', 0)->innertext); 
     // get details 
     $item['date'] = trim($event->find('div[class="date"]', 0)->innertext); 

     $item['time'] = trim($event->find('div[class="time"]', 0)->innertext); 

     $ret[] = $item; 
    } 


    // clean up memory 
    $html->clear(); 
    unset($html); 

    return $ret; 
} 

를 많이 선택 필요하지 않은 테이블 행의 시도, 난 제목이 아닌 날짜 나 시간을 얻기 위해 관리 않습니다.

효율적으로 필요한 데이터를 선택하도록 도와주세요.

+0

잘 사이트 사용 약관을 위반했는지 모릅니다. –

답변

1

우선, 내장 된 dom 라이브러리보다 안정성이 낮기 때문에 간단한 html dom을 사용하지 마십시오. 몇 년 전에는 유용했지만 요즘은 문제가 해결되는 것보다 더 많은 문제를 야기합니다.

$dom = new DOMDocument(); 
@$dom->loadHTMLFile('http://uk.ufc.com/schedule/event/'); 
$xpath = new DOMXPath($dom); 

다음으로 원하는 행을 식별하는 더 나은 방법이 필요합니다. table tr은 페이지의 모든 tr을 선택하므로 원하지 않습니다. tr의 스타일이 멋지지만 좋을 것 같아요. 그래서 이걸 생각해 냈습니다.

foreach($xpath->query('//td[@class="upcoming-events-image"]/..') as $tr){ 
    $item['title'] = $xpath->query('.//div[@class="event-tagline"]/a', $tr)->item(0)->nodeValue; 
    $item['date'] = $xpath->query('.//div[@class="date"]', $tr)->item(0)->nodeValue; 
    $item['time'] = $xpath->query('.//div[@class="time"]', $tr)->item(0)->nodeValue; 
    $ret[] = $item; 
}