【发布时间】: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