Возникли проблемы при разборе HTML с PHP и Simple HTML DOM - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь проанализировать HTML с помощью simple_html_dom.php.HTML-код, который я пытаюсь разобрать, показан ниже.Я могу успешно получить каждое название продукта: Product 1, Product 2, Product 3 и т. Д.

Я также хотел бы получить itemprice_0 с каждого продукта.Здесь я сталкиваюсь с проблемами.Вот мой код:

<?php
require_once 'simple_html_dom.php';

$html = file_get_html('https://www.webaddress.com');

foreach($html->find('span.productName') as $e)
echo $e.'<br />'; //successfully displays all product names

foreach($html->find('#itemprice_0') as $e)
echo $e; //doesn't display the item prices

foreach($html->find('.dollar') as $e)
echo $e; //doesn't display the dollar amounts
?>

Вот HTML:

<span class="productName">Product 1</span>  

<p class="price">
<strike>
<span class="dollar-symbol">$</span>  
<span class="dollar">15</span><span class="dot">.</span>  
<span class="cents">99</span></strike>
</p>  

<p class="salePrice" id='itemprice_0'>  
<span class="dollar-symbol">$</span>  
<span class="dollar">13</span><span class="dot">.</span>  
<span class="cents">99</span>  
</p>

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Я получил доступ к классу salePrice и повторил сумму в долларах.

foreach($html->find('span.productName') as $e)
    echo $e.'<br />'; //successfully displays all product names

foreach($html->find('p.price') as $e)
    $e = str_replace(' ', '', $e);
    echo 'Regular Price: ' . $e;

foreach($html->find('p.salePrice') as $e)
    $e = str_replace(' ', '', $e);
    echo 'Sale Price: ' . $e;

Я также удалил пробелы.

Результат:

Product 1
Regular Price: $15.99
Sale Price: $13.99

Я также заставил цикл искать только идентификатор itemprice_0 и получил тот же результат:

foreach($html->find('p[id=itemprice_0]') as $e)
$e = str_replace(' ', '', $e);
echo 'Sale Price: ' . $e;

Тот же результат:

Product 1
Regular Price: $15.99
Sale Price: $13.99

Это то, что вы искали?

0 голосов
/ 03 октября 2018

Вы можете использовать следующее решение для решения вашей проблемы:

$domd=@DOMDocument::loadHTML($html);
$xp=new DOMXPath($domd);
foreach($xp->query('//*[contains(@class,"dollar")]') as $e)
var_dump($e->textContent);
0 голосов
/ 03 октября 2018

itemprice_0 уникален, если вы хотите выбрать более одного элемента, вы должны использовать селектор класса.В simple_html_dom вы можете извлекать вложенные элементы следующим образом (не проверял):

<?php
require_once 'simple_html_dom.php';

foreach($html->find('.salePrice') as $prices){
    echo $price->find('.dollor')->plaintext;
    echo $price->find('.cents')->plaintext;
}
...