-2

以下は私のコードです:

$xpath = new DOMXPath($doc);
// Start from the root element
$query = '//div[contains(@class, "hudpagepad")]/div/ul/li/a';
$nodeList = @$xpath->query($query);

// The size is 104
$size = $nodeList->length;

for ( $i = 1; $i <= $size; $i++ ) {
    $node = $nodeList->item($i-1);
    $url = $node->getAttribute("href");

    $error = scrapeURL($url);
}

function scrapeURL($url) {
    $cfm = new DOMDocument();
    $cfm->loadHTMLFile($url);
    $cfmpath = new DOMXPath($cfm);
    $pointer = $cfm->getElementById('content-area');
    $filter = 'table/tr';

    // The problem lies here    
    $state = $pointer->firstChild->nextSibling->nextSibling->nodeValue;

    $nodeList = $cfmpath->query($filter, $pointer);
}

基本的に、これはリンクのリストにトラバースし、scrapeURL メソッドで各リンクをスクレイピングします。

ここでの問題はわかりませんが、ランダムに取得しようとして非オブジェクト型のエラーが$pointer発生し、エラーなしで値が正しい場合があります。

ここで問題を知っている人はいますか?問題が発生するポイントは、ページが正しく読み込まれていないときだと思いますか?

4

1 に答える 1

0

私はここで答えのアイデアを見つけました:

http://sharovatov.wordpress.com/2009/11/01/php-loadhtmlfile-and-a-html-file-without-doctype/

getElementById cozを使用するよりも、「手動」クエリを使用する方が適切です。ロードしようとしているドキュメントのDOCTYPEが適切に形成されていない場合、クエリは機能しなくなります。

したがって、代わりにこれを使用してください。

$cfmpath->query("//*[@id='content-area']")

またはメソッドを作成します

function getElementById($id) {
    global $dom;
    $xpath = new DOMXPath($dom);
    return $xpath->query("//*[@id='$id']")->item(0);
}

助けてくれた人たちに感謝します!

于 2012-06-11T06:55:25.563 に答える