首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在PHP中从html页面中刮取H2和H3标记?

如何在PHP中从html页面中刮取H2和H3标记?
EN

Stack Overflow用户
提问于 2015-12-17 08:40:22
回答 4查看 3.3K关注 0票数 4

我需要从下面的html代码中获取php中的h2和h3标记为$var:

代码语言:javascript
运行
复制
<div class="main-info">
   <img class="iphone-img" alt="" src="https://www.myweb.com/securedImage.jsp">
        <div class="sub-info">
                <h2 class="model">iPhone 4S</h2>
                <h3 class="capacity color">16GB Black</h3>
          </div>
</div>

我想要这个结果:

代码语言:javascript
运行
复制
echo $model; // Should echo:  'iPhone 4S'
echo $capacitycolour; // Should echo: '16GB Black'

我试过preg_matchpreg_match_allgetElementsByTagName,但是到目前为止没有运气。

下面是我尝试过的代码:

代码语言:javascript
运行
复制
$pattern = '/[^\n]h2*[^\n]*/';
preg_match_all($pattern,$data, $matches, PREG_OFFSET_CAPTURE);
var_dump($matches);

以及:

代码语言:javascript
运行
复制
$doc = new DOMDocument();
$doc->loadHTML($data);
$tags = $doc->getElementsByTagName('sub-info');

$root = $doc->documentElement;
foreach($root->childNodes as $node){
    $attributes[$node->nodeName] = $node->nodeValue;
}

var_dump($attributes);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-12-17 08:46:04

sub-info是类,而不是标签名,因此您对DOMDocument的使用是有缺陷的,您可能最好使用XPath查询。

代码语言:javascript
运行
复制
$strhtml='<div class="main-info">
            <img class="iphone-img" alt="" src="https://www.myweb.com/securedImage.jsp?configcode=DTF9&size=120x120">
            <div class="sub-info">
                <h2 class="model">
                        iPhone 4S
                </h2>
                <h3 class="capacity color">
                    16GB Black 
                </h3>
            </div>
        </div>';


$doc = new DOMDocument();
$doc->loadHTML( $strhtml );
$xpath=new DOMXPath( $doc );
$col=$xpath->query('//div[@class="sub-info"]/h2|//div[@class="sub-info"]/h3');
if( $col ){
    /* You could store results from query in an array */
    $tags=array();
    foreach( $col as $node ) {

        /* Simplest form to display results on separate lines, use br tag */
        echo $node->nodeValue . '<br />';

        /* Add tags to array - a rethink would be required if there are multiple h2 and h3 tags! */
        $tags[ $node->tagName ]=$node->nodeValue;

    }
    /* echo back results from array */
    echo $tags['h2'];
    echo '<br />';
    echo $tags['h3'];
}
票数 5
EN

Stack Overflow用户

发布于 2015-12-17 08:48:36

将来,只需尝试在线regex测试器来验证您的表达式。

对于H2-标记,以下内容可以工作:.*<h2.*>[\n\s]*(.*) (尽管没有找到最理想的)

票数 1
EN

Stack Overflow用户

发布于 2015-12-17 08:45:25

我以前在很多情况下都使用过dom.php,并且工作得很好。它允许在加载文档后使用类似选择器的CSS。此外,您还可以解析字符串、本地文件或URL!下面将为您提供一个Element的数组:

代码语言:javascript
运行
复制
$div = $html->find('div.sub-info');
$ret = $div[0]->find('h2, h3');

API参考:这里

警告:不要使用RegEx解析这里,如果您确实看到了会发生什么:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34330056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档