使用simple_html_dom.php找不到元素

时间:2013-12-02 11:08:23

标签: php simple-html-dom

这是我正在使用的脚本:

<?php

    include_once("simple_html_dom.php");

    $html = file_get_html("http://www.amazon.com/gp/product/B000VS8CTM");
    $title = $html->find('#title');
    echo count($title);

?>

count($ title)返回0.

网页确实有一行

<h1 id="title" class="a-size-large a-spacing-none">Folding Helping Hand Long-Reach Pick-Up Gripper - 26" Aluminum</h1>

但是simple_html_dom脚本找不到它。

我也试过

$title = $html->find('h1[id=title]');

但是count($ title)仍然返回0.

我跑

echo $html->plaintext;

并且标题就在那里。

我不知道问题是什么。

感谢任何帮助!


编辑:

我注意到在保存帖子后,stackoverflow以某种方式更改了我的URL。

这是正确的函数调用:file_get_html(“http://www.amazon.com/gp/product/B000VS8CTM”)。

4 个答案:

答案 0 :(得分:0)

您可以使用foreach()循环以这种方式使用:

include_once("simple_html_dom.php");

$html = file_get_html("http://rads.stackoverflow.com/amzn/click/B000VS8CTM");
foreach($html->find('h1') as $element) 
{
    echo $element->plaintext;
}

答案 1 :(得分:0)

试试这个:

<?php
$url = "http://www.amazon.com/gp/product/B000VS8CTM";

include_once("simple_html_dom.php");

$_curl = curl_init();
curl_setopt($_curl, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($_curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($_curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($_curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.1)');
curl_setopt($_curl, CURLOPT_URL, $url);
$html = curl_exec( $_curl );

$_htmlDom = new simple_html_dom();
$_htmlDom->load(  $html  );
$productTitle = $_htmlDom->find('h1#title', 0)->innertext;
$str = $_htmlDom->save();
var_dump($str); //return string length: 400946, refer to Remark 1
$_htmlDom->clear();

var_dump($productTitle);
?>

备注1:

我也测试了跟随代码,必须有不同之处,但我没有追踪细节。

摘要结果:

  • 使用 cURL 必须使用 CURLOPT_RETURNTRANSFER
  • 使用 _htmlDom-&gt; load_file 有时候会遗漏一些东西

编码:

<?php
$_htmlDom = new simple_html_dom();
$_htmlDom->load_file(  $url  ); // or get HTML from SimpleHtmlDom
$productTitle = $_htmlDom->find('h1#title', 0)->innertext;
var_dump($productTitle); //return NULL
$str = $_htmlDom->save();
var_dump($str); //return string length: 283459
$_htmlDom->clear();
?>

答案 2 :(得分:0)

这会给你标题。尝试:

<?php
    include_once("simple_html_dom.php");

    $html = new simple_html_dom();
    $html->load_file("http://rads.stackoverflow.com/amzn/click/B000VS8CTM");
    $title = $html->find('h1',0);
    $title = $title->find('#btAsinTitle',0);
    echo $title->innertext;
?>

答案 3 :(得分:0)

我刚刚把它放在文件

中修复了我的类似问题
ini_set('user_agent', 
  'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3');

归功于此网站:http://www.electrictoolbox.com/php-change-user-agent-string/