【问题标题】:HTML comment scraping in PHPPHP 中的 HTML 注释抓取
【发布时间】:2010-11-22 21:16:57
【问题描述】:

我一直在环顾四周,但尚未找到解决方案。我正在尝试抓取 HTML 文档并获取两个 cmets 之间的文本,但是到目前为止还无法成功。

我正在使用 PHP,并且已经尝试过这里推荐的 PHP Simple DOM 解析器很多次,但似乎无法让它做我想做的事情。

这是我希望解析的页面(部分):

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

  Text I want

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

谢谢

【问题讨论】:

  • 您能告诉我们您当前的代码吗?

标签: php html parsing screen-scraping html-content-extraction


【解决方案1】:

假设每条评论都不同(即第一和第二部分中的“blah”不一样),您可以使用一些简单的strpos 来抓取它们之间的所有内容。 不需要正则表达式。

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

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

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

如果两组 cmets 相同,则需要使用strposoffset 参数对其进行修改以找到第二个“blah”

【讨论】:

    【解决方案2】:

    也许你可以使用正则表达式?

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

    【讨论】:

    • 强制性“现在你有两个问题”评论;)
    • “每次你试图用正则表达式解析 HTML 时,邪恶的孩子都会流着处女的血”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2011-12-21
    • 2013-09-23
    • 2015-12-19
    • 2022-01-04
    • 1970-01-01
    • 2014-02-12
    相关资源
    最近更新 更多