Очистка данных HTML с использованием PHP

0

Как parse HTML data в PHP array PHP

Данные HTML

<div class="test">
    <strong>ID</strong>
    <a href="a.html" title="a html">123456</a><br>
    <label class='label'>Occupation </label>    
    House wife      <br>
    <label>Language?</label>    
    English     <br>
    <label style="width:50%">Basic Language Knowledge of?</label>   
    Hindi       <br>
    <label>Start date</label>
    Nov 2013        <br>
    <label>Other Info</label>
    yes     <br>
    <label>age</label>
    19      <br>
    <label>Gender</label>   
    Female      <br>
    <strong>Address</strong>
    India       <br><br>
    <p>Hi, <br>
Lorem ipsum doner inut</p>
</div>

Я попробовал это,

<?php
    $html='Let above html to parse';
    preg_match_all('/<label\s(.*)>(.*)<\/label>/U',$html,$m);
    print_r($m);
    // gives all label contents only but I need pair of label text 
    // and value showing after it
?>

Выходные данные,

Массив ('ID' => 123456, 'link' => 'a.html', 'Occupation' => 'House wife', 'Language?' => 'English', 'Basic Language Knowledge of?' => ' Хинди ',' Дата начала '=>' Ноябрь 2013 ',' Другая информация '=>' да ',' age '=>' 19 ',' Gender '=>' Female ',' Address '=>' India ', 'description' => 'Привет, Lorem ipsum doner inut');

Да, forgot to mention что я использую ganon для scrapping

  • 0
    Так в чем проблема?
Теги:

3 ответа

1

Используйте DOMDocument для анализа HTML.

$doc = new DOMDocument();
$doc->loadHTML($html);

И используйте DOMXPath для получения всех ваших ярлыков:

$xpath = new DOMXPath($doc);
$allLabels = $xpath->query('//label');

foreach($allLabels as $label) {
    var_dump($label, $label->nodeValue);

    /* or */
    $labelElmnts = $xpath->query('/*', $label);

    $innerHTML = '';

    foreach($labelElmnts as $elmnt)
        $innerHTML .= $domDoc->saveHTML($elmnt);

    var_dump($innerHTML);
}
  • 0
    Он даст только список данных label data and I need the text after label data like, профессия => 'домохозяйка'`
  • 0
    Прочитайте документ: php.net/manual/en/class.domnode.php . ->nodeValue это то, что вы ищете. Взгляните на мой отредактированный код в ответе.
0

Я использовал ganon поэтому я не хочу использовать Dom Document Я попробовал что-то и worked,

// for description
echo $desc=$html('div.right_div p',0)->getInnerText();

$s=$html('div.right_div',0)->getInnerText();

// for occupation
$r='/<label>\s*Occupation\s*<\/label>\s*(.*)\s*<br\s*[\/]>/i';
preg_match_all($r,$s,$ma);
echo $occupation=$ma[1];

// for address
$r='/<strong>\s*Address\s*<\/strong>\s*(.*)\s*<br\s*[\/]>/i';
preg_match_all($r,$s,$ma);
echo $address=$ma[1];

// for id
echo $id=$html('div.right_div a',0)->getInnerText();

И так далее ...

0

Еще проще.

Использовать QueryPath:

foreach(qp($html, 'label') as $label){
  echo $label->text();
}

Также как jquery.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню