【问题标题】:Unable to fetch Price无法获取价格
【发布时间】:2014-09-02 11:47:09
【问题描述】:

我正在尝试从在线商店获取价格。

我在这里使用这个代码..

<?php
function getPrice($site){
    $html = file_get_contents($site);
    $dom = new DOMDocument();
    $dom->loadHTML($html);
    $contents = $dom->document.getElementsByTagName("span");        

    $price = "";
    for($i = 0; $i < $contents->length; $i++){
        $content= $contents->item($i);
        if($content->getAttribute('class') == "fk-font-verybig pprice vmiddle fk-bold"){
            $price = $content->getAttribute('value');
        }
    }
    echo $price;
}

$website = "http://www.flipkart.com/sogo-ss-5365-750-w-pop-up-toaster/p/itmdz3hgfjzgfp4v?pid=PUTDYWT2UHPCDCG8&offer=DOTDOnPopUpToaster_Sep2.&icmpid=hp_dotd_3_DOTDOnPopUpToaster_Sep2.";

getPrice($website);


?>

我的脚本返回错误

警告:DOMDocument::loadHTML(): Unexpected end tag : span in Entity, line: 261 in E:\Local server\htdocs\store\scripts\getprice.php on line 5

Warning: DOMDocument::loadHTML(): htmlParseEntityRef: no name in Entity, line: 293 in E:\Local server\htdocs\store\scripts\getprice.php on line 5

...................................................................

Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 6160 in E:\Local server\htdocs\store\scripts\getprice.php on line 5

Notice: Undefined property: DOMDocument::$document in E:\Local server\htdocs\store\scripts\getprice.php on line 6

Fatal error: Call to undefined function getElementsByTagName() in E:\Local server\htdocs\store\scripts\getprice.php on line 6

是否可以这样获取价格,因为商店不断更改其产品的价格。 还有其他替代方法吗?

此脚本是否会影响我的服务器性能,因为每次用户访问我网站上的产品页面时,它都会从 5 个不同的商店获取价格以比较价格。

【问题讨论】:

  • 如果您拥有从他们的网站获取价格的官方法律许可,您应该联系他们以获取 xml 或 csv 格式的价格信息。是的,它会影响页面加载。您应该缓存价格(memcache、redis、sql)。
  • 你可以删除点并尝试一次 DOTDOnPopUpToaster_Sep2.&icmpid=hp_dotd_3_DOTDOnPopUpToaster_Sep2.?
  • 考虑在 MySQL 中存储价格以减少再次从服务器获取的时间
  • 试图删除 DOTDOnPopUpToaster_Sep2.&icmpid=hp_dotd_3_DOTDOnPopUpToaster_Sep2.?仍然遇到同样的错误
  • 您只需要禁用警告,因为无效的 html 很常见。看到这个答案stackoverflow.com/questions/11819603/…

标签: php domdocument server-load server-response


【解决方案1】:
$contents = $dom->document.getElementsByTagName("span");

您的 $dom->document 失败,因为 DOMDocument 类没有名为“document”的属性。

Notice: Undefined property: DOMDocument::$document in E:\Local server\htdocs\store\scripts\getprice.php on line 6

所以这可能有效

$contents = $dom->getElementsByTagName("span");

以上应该可以。

我建议迭代 $contents 而不是 echo。

甚至 print_r 都可以帮助您查看 $contents 中的节点结构。

【讨论】:

  • Thnx 有帮助,但现在我只收到警告但没有输出
  • 警告是什么?
  • 警告:DOMDocument::loadHTML(): Unexpected end tag : span in Entity, line: 261 in E:\Local server\htdocs\store\scripts\getprice.php on line 6 警告:DOMDocument ::loadHTML(): htmlParseEntityRef: no name in Entity, line: 293 in E:\Local server\htdocs\store\scripts\getprice.php on line 6 警告: DOMDocument::loadHTML(): htmlParseEntityRef: no name in Entity , line: 293 in E:\Local server\htdocs\store\scripts\getprice.php on line 6 .... 警告:DOMDocument::loadHTML(): htmlParseEntityRef: 期待 ';'在实体中,第 6 行的 E:\Local server\htdocs\store\scripts\getprice.php 中的第 6125 行
  • @user3811305 按照我之前的建议关闭警告
  • 我的意思是我的脚本没有返回任何东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多