0
    <?php

$file = 'http://www.google.com';
$doc = new DOMDocument();
@ $doc->loadHTML(file_get_contents($file));

echo $doc->getElementsByTagName('span')->item(2)->nodeValue;

if (0 != $element->length) 
{
    $content = trim($element->item(2)->nodeValue);
    if (empty($content)) 
    {
        $content = trim($element->item(2)->textContent);
    }
    echo $content . "\n";
}

?>

google.com のホーム サイトからスパン タグの内部コンテンツを取得しようとしています。このコードは最初の span タグを出力するはずですが、結果を出力していませんか?

4

4 に答える 4

4

これはエラーではありません...最初のスパンhttp://www.google.comが空で、他に何が期待できるかわかりません

 <span class=gbtcb></span> <----------------  item(0)
 <span class=gbtb2></span> <----------------  item(1)
 <span class=gbts>Search</span> <-----------  item(2)

試す

$element = $doc->getElementsByTagName('span')->item(2);
var_dump($element->nodeValue);

出力

Search
于 2012-11-25T18:28:35.277 に答える
0

これを試して、出力が何であるかを教えてください

<?
echo ini_get('allow_url_fopen');
?>
于 2012-11-25T18:40:37.230 に答える
0

まず、HTML は必ずしも有効な XML ではないことに注意してください。

それはさておき、実際に解析するコンテンツを取得していることを確認してください。URLallow_url_fopenで使用するには、有効にする必要があります。file_get_contents()

一般に、エラー抑制演算子 (@) の使用は避けてください。SO の他の場所でこれに関する議論があります。

したがって、最初のステップとして、次のようなものに切り替えて、コンテンツを取得できるかどうかをお知らせください。

// stop using @ to suppress errors
$contents = file_get_contents($file);
// check that you're getting something to parse
echo $contents;
于 2012-11-25T18:28:01.097 に答える
0

cURL を使用してデータを取得し、それを DOMDocument にロードしてみてください。

<?php
$url = "http://www.google.com";
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);

$dom = new DOMDocument();
@$dom->loadHTML($data); //The @ is necessary to suppress invalid markup

echo $dom->getElementsByTagName('span')->item(2)->nodeValue;

if (0 != $element->length) 
{
    $content = trim($element->item(2)->nodeValue);
    if (empty($content)) 
    {
        $content = trim($element->item(2)->textContent);
    }
    echo $content . "\n";
}

?>
于 2012-11-25T19:10:06.857 に答える