Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTML comment scraping in PHP

I've been looking around but have yet to find a solution. I'm trying to scrape an HTML document and get the text between two comments however have been unable to do this successfully so far.

I'm using PHP and have tried the PHP Simple DOM parser recommended here many times but can't seem to get it to do what I want.

Here's (part of) the page that I wish to parse:

<div class="class">
  <!-- blah -->
    text
  <!-- end blah -->

  Text I want

  <!-- blah -->
    text
  <!-- end blah -->
</div>

Thanks

like image 341
Pep Avatar asked Sep 23 '26 10:09

Pep


2 Answers

Assuming that each comment is different (i.e. "blah" is not the same in the first and second sections), you can use some simple strpos to grab everything between them. Regular expressions are not necessary.

$startStr = '<!-- end blah1 -->';
$endStr = '<!-- start blah2 -->';

$startPos = strpos($HTML, $startStr) + strlen($startStr);
$endPos = strpos($HTML, $endStr );

$textYouWant = substr($HTML, $startPos, $endPos-$startPos);

If the two sets of comments are the same, you'll need to modify this to find the second "blah", using strpos's offset parameter

like image 184
DisgruntledGoat Avatar answered Sep 26 '26 00:09

DisgruntledGoat


Maybe you can use regular expressions?

$text = '
<div class="class">
  <!-- blah -->
    text
  <!-- end blah -->

  Text I want

  <!-- blah -->
    text
  <!-- end blah -->
</div>
';

$regex = '/(<!-- end blah -->)(.*?)(<!-- blah -->)/ims';
$match = preg_match_all ($regex, $text, $matches);
like image 29
Deniss Kozlovs Avatar answered Sep 26 '26 00:09

Deniss Kozlovs



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!