Как 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
Используйте 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);
}
label data and I need the text after label data like,
профессия => 'домохозяйка'`
->nodeValue
это то, что вы ищете. Взгляните на мой отредактированный код в ответе.
Я использовал 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();
И так далее ...
Еще проще.
Использовать QueryPath:
foreach(qp($html, 'label') as $label){
echo $label->text();
}
Также как jquery.