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!

Était-ce utile?

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 ();

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top