【问题标题】:How to extract only certain tags from HTML document using PHP?如何使用 PHP 从 HTML 文档中仅提取某些标签?
【发布时间】:2023-03-14 23:52:01
【问题描述】:

我正在使用爬虫来检索网络上某些页面的 HTML 内容。我目前将整个 HTML 存储在一个 PHP 变量中:

$string = "<PRE>".htmlspecialchars($crawler->results)."</PRE>\n";

我想要做的是选择所有“p”标签(例如)并将它们存储在一个数组中。这样做的正确方法是什么?

我使用 xpath 尝试了以下操作,但它没有显示任何内容(很可能是因为文档本身不是 XML,我只是复制粘贴了文档中给出的示例)。

$xml = new SimpleXMLElement ($string);

    $result=$xml->xpath('/p');
    while(list( , $node)=each($result)){
        echo '/p: ' , $node, "\n"; 
    }

希望在 PHP 方面有(很多)经验的人能够帮助我:D

【问题讨论】:

  • 这可能会帮助你:simplehtmldom.sourceforge.net
  • 非常感谢!这看起来是一个非常可靠和优雅的解决方案。将立即调查!
  • 没问题。虽然并不完美,但它似乎大部分时间都有效。
  • 它抓取整个文档,然后解析它。有关详细信息,请参阅完整文档:simplehtmldom.sourceforge.net/manual.htm
  • 另外,请确保您在find 之后使用它。你需要echo我们做点什么

标签: php xpath tags store web-crawler


【解决方案1】:

查看简单的 HTML Dom。它将抓取外部页面并以相当准确的细节对其进行处理。

http://simplehtmldom.sourceforge.net/

可以这样使用:

// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');

// Find all images
foreach($html->find('img') as $element)
   echo $element->src . '<br>';

【讨论】:

    【解决方案2】:

    尝试使用DOMDocumentDOMDocument::getElementsByTagName。工作流程应该非常简单。比如:

    $doc = DOMDocument::loadHTML(htmlspecialchars($crawler->results));
    $pNodes = $doc->getElementsByTagName('p');
    

    这将返回一个 DOMNodeList。

    【讨论】:

      【解决方案3】:

      我投票赞成使用正则表达式。对于标签 p

      preg_match_all('/<p>(.*)<\/p>/', '<p>foo</p><p>foo 1</p><p>foo 2</p>', $arr, PREG_PATTERN_ORDER);
      if(is_array($arr))
      {
       foreach($arr as $value)
       {
         echo $value."</br>";
       }
      }
      

      【讨论】:

      • 我写的是同样的,我要补充一点,使用 XML 阅读器来阅读 HTML 文档是不安全的。网络上没有一半的 HTML 以 XML 格式正确形成...
      • 是的...我在我们说话的时候发现了这一点。感谢您抽出宝贵时间...我会在几秒钟内尝试您的解决方案并回复您..
      • 如果您担心格式正确的 HTML,请查看 DOMDocument 上的文档。它的 loadHTML 方法不需要完美地形成 HTML,它提供了很多便利。
      猜你喜欢
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多