1

嗨,我正在尝试使用 Simple HTML DOM Parser 抓取 UFC 事件时间表。

我正在努力选择正确的数据。

我想要标题、图像、日期、时间和位置。

到目前为止我已经尝试过

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;
}

选择了很多不需要的表格行,我确实设法获得了标题,但没有获得日期或时间。

请帮助我有效地选择我需要的数据。

4

1 回答 1

1

首先,停止使用简单的 html dom,因为它不如内置的 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;
}
于 2012-09-24T01:10:24.077 回答