【问题标题】:PHP Dom Get Only first meta tagPHP Dom 只获取第一个元标记
【发布时间】:2013-01-05 23:06:11
【问题描述】:

我是一名初级程序员,正在构建一个用于抓取数据并将数据放入数据库的应用程序。

我正在尝试抓取如下所示的内容:

<meta property="og:image" content="image_url_1">
<meta property="og:image" content="image_url_2">

我想要第一个元标记的内容,而不是第二个的内容。现在 $meta_og_image 的值是第二个元标记的内容。这是我的php代码:

$html = new DOMDocument();
@$html->loadHTML($sites_html);

$meta_og_image = null; //reset
//Get all meta tags and loop through them.
foreach($html->getElementsByTagName('meta') as $meta) {

  if($meta->getAttribute('property')=='og:image'){ 
    //Assign the value from content attribute to $meta_og_image
    $meta_og_image = $meta->getAttribute('content');
  }
}
echo $meta_og_image;

感谢您的所有帮助!

【问题讨论】:

  • 我强烈推荐这个库 (simplehtmldom.sourceforge.net) 用于 html 抓取。我也是从 DOM 开始的,因为我是初学者,相信我 simple_html_dom 更容易更好

标签: php parsing dom html-parsing


【解决方案1】:

你可以在找到第一个循环后打破循环。

foreach($html->getElementsByTagName('meta') as $meta) {
    if($meta->getAttribute('property') == 'og:image') { 
        //Assign the value from content attribute to $meta_og_image
        $meta_og_image = $meta->getAttribute('content');
        //stop all iterations in this loop
        break;
    }
}

但是,如果您计划在该循环中定义其他变量,这不是很通用。话虽如此,您可以检查$meta_og_image 是否已定义。

foreach($html->getElementsByTagName('meta') as $meta) {
    if($meta->getAttribute('property') == 'og:image' && !isset($meta_og_image)) { 
        //Assign the value from content attribute to $meta_og_image
        $meta_og_image = $meta->getAttribute('content');
    }
}

您必须在开头删除$meta_og_image 的定义。稍后如果您检查它是否为null,只需使用!isset($meta_og_image)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-05
    • 2014-05-03
    • 1970-01-01
    • 2014-08-02
    • 2011-12-04
    • 2020-09-20
    • 1970-01-01
    相关资源
    最近更新 更多