繁体   English   中英

代码无法通过简单的google.com测试进行解析

[英]code not parsing through a simple google.com test

    <?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标签的内部内容。 此代码应输出第一个span标记,但不输出任何结果?

这不是错误... 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

首先,请记住,HTML不一定是有效的XML。

除此之外,请检查您是否确实要解析一些内容; 您需要启用allow_url_fopen才能将file_get_contents()与URL结合使用。

通常,避免使用错误抑制运算符(@),因为几乎可以肯定它会再次咬住您一段时间(此时可能正是该时间); 在SO的其他地方对此进行了讨论。

因此,作为第一步,请切换至以下内容,让我知道您是否有任何内容。

// stop using @ to suppress errors
$contents = file_get_contents($file);
// check that you're getting something to parse
echo $contents;

试试这个,告诉我们输出是什么

<?
echo ini_get('allow_url_fopen');
?>

尝试使用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";
}

?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM