I use PHP Simple HTML DOM Parser to get information from the page. I can not parse the contents of the tags, as they do not have a clear location. He can go second, maybe fifth, or maybe first, the only thing you can catch on is his position after the following construction: <p class="oposit part1 part2">ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅</p>

 // ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1 <div class=primer> <p class="oposit part1 part2">ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅</p> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ΅Π½</div> </div> // ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2 <div class=primer> <p class="oposit part1 part2">НаимСнования</p> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <p class="oposit part1 part2">ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅</p> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ΅Π½</div> </div> // ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3 <div class=primer> <p class="oposit part1 part2">Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°</p> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <p class="oposit part1 part2">НаимСнования</p> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <p class="oposit part1 part2">ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅</p> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ΅Π½</div> </div> // ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4 <div class=primer> <p class="oposit part1 part2">Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°</p> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <p class="oposit part1 part2">НаимСнования</p> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <p class="oposit part1 part2">ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅</p> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ΅Π½</div> <p class="oposit part1 part2">Π˜ΡΡ‚ΠΎΡ€ΠΈΡ</p> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> </div> 

Is it possible, for example, using the regular schedule, to indicate to the parser, the location of the necessary tags? If there is another way to solve the problem, please suggest it.

    1 answer 1

    The solution looks like this:

     <?php include "simple_html_dom.php"; $html = new simple_html_dom(); $html->load('<html><body> <div class=primer> <p class="oposit part1 part2">Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°</p> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <p class="oposit part1 part2">НаимСнования</p> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <p class="oposit part1 part2">ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅</p> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ΅Π½</div> <p class="oposit part1 part2">Π˜ΡΡ‚ΠΎΡ€ΠΈΡ</p> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> <div class="halfM indPar">ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½</div> </div></body></html>'); $ret = $html->find('p[class=oposit part1 part2]'); foreach ($ret as $element) { if ($element->plaintext == 'ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅') { $next = $element; while (($next = $next->next_sibling()) && $next->class == 'halfM indPar') { echo $next->plaintext . "<br>\n"; } break; } } 

    Displays all 4 examples:

     ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ΅Π½ ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ΅Π½ 

    Note: If classes are rearranged in the elements you need or characters (spaces for example) are added to the class enumeration, this code will not work.

    • Thank you. I decided to complicate the situation for myself, added some more <p class = "oposit part1 part2"> Note </ p> and divs after it, fixed the break on continue to continue searching, added control of the number of divs <div class = "halfM indPar" > no more than 2 and brought the data to the array, but bad luck with echo, the data is shown normally, but the array is duplicated, and even the quantity control does not work. Any idea what I did wrong? jsfiddle.net/g9sq9rnx/5 - Twashington