1

こんにちは私はSimpleHTMLDOMパーサーで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

まず、組み込みのdomライブラリよりも信頼性が低いため、単純なhtmldomの使用を停止します。数年前は便利でしたが、最近では解決するよりも多くの問題が発生します。

$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 に答える