一切正常,当然,但我觉得这里有很多额外的代码。我认为foreach这里是多余的。
你能告诉我,这里可以不用一堆循环吗?我们不仅需要显示价格,它会更容易,将来,价格变量将用于计算。
function get_web_page( $url )
{
$uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14";
$ch = curl_init( $url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращает веб-страницу
curl_setopt($ch, CURLOPT_HEADER, 0); // не возвращает заголовки
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // переходит по редиректам
curl_setopt($ch, CURLOPT_ENCODING, ""); // обрабатывает все кодировки
curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 120); // таймаут ответа
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // останавливаться после 10-ого редиректа (не много ли!?)
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}
$url = 'https://металлград.com/catalog/truba-profilnaya/';
$data = get_web_page($url); // загружаем результат с помощью нашей функции
$dom = new DomDocument();
libxml_use_internal_errors(true);
$dom->loadHTML( $data['content'] );
libxml_use_internal_errors(false);
$xpath = new DomXPath( $dom );
$_20_20_15 = $xpath->query(".//*[@id='content']/div/div/div[2]/div[1]/div[1]/table/tbody/tr[3]/td[3]");
$_20_20_2 = $xpath->query(".//*[@id='content']/div/div/div[2]/div[1]/div[1]/table/tbody/tr[4]/td[3]");
$_25_25_15 = $xpath->query(".//*[@id='content']/div/div/div[2]/div[1]/div[1]/table/tbody/tr[5]/td[3]");
foreach( $_20_20_15 as $obj ) {$_20_20_15 = $obj->nodeValue;}
foreach( $_20_20_2 as $obj ) {$_20_20_2 = $obj->nodeValue;}
foreach( $_25_25_15 as $obj ) {$_25_25_15 = $obj->nodeValue;}
echo '20*20*1.5 - '.$_20_20_15.'<br/>';
echo '20*20*2 - '.$_20_20_2.'<br/>';
echo '25*25*1,5 - '.$_25_25_15.'<br/>';
我更喜欢正则表达式来解析 html,使用 DomDocument() 也可以循环浏览,而不是手动输入每个产品的价格。