comment utiliser l'analyseur dom php
-
12-09-2019 - |
Question
Je suis nouveau à l'analyse syntaxique DOM en PHP:
J'ai un fichier HTML que je suis en train d'analyser. Il a un tas de DIVs comme ceci:
<div id="interestingbox">
<div id="interestingdetails" class="txtnormal">
<div>Content1</div>
<div>Content2</div>
</div>
</div>
<div id="interestingbox">
......
Je suis en train de récupérer le contenu des nombreuses boîtes div en utilisant php. Comment puis-je utiliser l'analyseur DOM pour le faire?
Merci!
La solution
Tout d'abord, je dois vous dire que vous ne pouvez pas utiliser le même identifiant sur deux divs différentes; il y a des classes pour ce moment-là. Chaque élément doit avoir un identifiant unique.
Code pour obtenir le contenu du div id = "interestingbox"
$html = '
<html>
<head></head>
<body>
<div id="interestingbox">
<div id="interestingdetails" class="txtnormal">
<div>Content1</div>
<div>Content2</div>
</div>
</div>
<div id="interestingbox2"><a href="#">a link</a></div>
</body>
</html>';
$dom_document = new DOMDocument();
$dom_document->loadHTML($html);
//use DOMXpath to navigate the html with the DOM
$dom_xpath = new DOMXpath($dom_document);
// if you want to get the div with id=interestingbox
$elements = $dom_xpath->query("*/div[@id='interestingbox']");
if (!is_null($elements)) {
foreach ($elements as $element) {
echo "\n[". $element->nodeName. "]";
$nodes = $element->childNodes;
foreach ($nodes as $node) {
echo $node->nodeValue. "\n";
}
}
}
//OUTPUT
[div] {
Content1
Content2
}
Exemple avec des classes:
$html = '
<html>
<head></head>
<body>
<div class="interestingbox">
<div id="interestingdetails" class="txtnormal">
<div>Content1</div>
<div>Content2</div>
</div>
</div>
<div class="interestingbox"><a href="#">a link</a></div>
</body>
</html>';
//the same as before.. just change the xpath
[...]
$elements = $dom_xpath->query("*/div[@class='interestingbox']");
[...]
//OUTPUT
[div] {
Content1
Content2
}
[div] {
a link
}
Reportez-vous à la page DOMXPath pour plus de détails.
Autres conseils
Je suis que cela fonctionne en utilisant simplehtmldom en début:
$html = file_get_html('example.com');
foreach ($html->find('div[id=interestingbox]') as $result)
{
echo $result->innertext;
}
Très belle fonction
WebExtractor: https://github.com/knyga/webextractor
Il peut analyser avec css, regex, sélecteurs XPath. package Look et des tests pour des exemples: utiliser WebExtractor \ DataExtractor \ DataExtractorFactory; utilisation
WebExtractor \ DataExtractor \ DataExtractorTypes; utilisation
WebExtractor \ Client \ Client; usine $ = DataExtractorFactory :: GetFactory (); extracteur $ =
$> createDataExtractor usine (DataExtractorTypes :: CSS); $ client = new
Client; $ Content =
$ Client-> get ( ' https://en.wikipedia.org/wiki/2014_Winter_Olympics ' );
$ Extractor-> setContent (contenu $); $ H1 =
$ Extractor-> setSelector ( 'h1') -> extrait ();