首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用某个类从每个div中提取所有p和一个标记。

使用某个类从每个div中提取所有p和一个标记。
EN

Stack Overflow用户
提问于 2014-10-07 10:17:33
回答 2查看 505关注 0票数 1

我有一个具有以下结构的网页:

代码语言:javascript
复制
<html>
  <body>
    <div class='title'>
      <a></a>
      <p></p>
    </div>
    <div class='title'>
      <a></a>
      <p></p>
    </div>
    <div class='title'>
      <a></a>
      <p></p>
    </div>
    <div class='title'>
      <a></a>
      <p></p>
    </div>
  </body>
</html>

页面中还有其他内容,但就这个问题而言,它是不相关的(某种程度上)。

我想做的是用类<a>从每个div中提取title<p>元素。我已经介绍了许多方法(simple-html-domxPath、Regex等)。但是,由于我对PHP的了解有限,我很难理解,向正确的方向推进一点可能会对我有很大的帮助。

所以我的问题是,你会用什么?你能给我举个例子说明你会如何使用它吗。这不一定是愚蠢的证据,只要我有了主意,我就会做剩下的事。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-07 10:27:17

是的,您可以在这种特殊情况下使用DOMDocument

下面是一个粗略的例子:

代码语言:javascript
复制
$markup = "<html>
  <body>
    <div class='title'>
      <a></a>
      <p></p>
    </div>
    <div class='title'>
      <a></a>
      <p></p>
    </div>
    <div class='title'>
      <a></a>
      <p></p>
    </div>
    <div class='title'>
      <a></a>
      <p></p>
    </div>
  </body>
</html>";

$dom = new DOMDocument();
$dom->loadHTML($markup);
$xpath = new DOMXpath($dom);
$elements = array();
$search = $xpath->query('//div[@class="title"]');
foreach($search as $node) {
    foreach($node->childNodes as $k => $child) {
        if(isset($child->tagName) && ($child->tagName == 'a' || $child->tagName == 'p')) {
            $data[$k][] = $child;
            // or $child->nodeValue if you want the innertext
        }
    }
}

echo '<pre>';
print_r($data);

或者类似这样的东西,如果你只是期望这个结构总是这样:

代码语言:javascript
复制
$search = $xpath->query('//div[@class="title"]');
foreach($search as $k => $node) {
    $a = $xpath->query('//a', $node)->item(0);
    $p = $xpath->query('//p', $node)->item(0);
    $data[] = array('a' => $a, 'p' => $p);
}
票数 1
EN

Stack Overflow用户

发布于 2014-10-07 10:42:40

您也可以使用php,这里有一些代码来帮助

代码语言:javascript
复制
   <?php
     $filename="nameofhtmlfile.html"
   $contents = file_get_contents($filename);
   $new_contents = str_replace('<div class=\'title\'><a></a><p></p></div>', '<div class=\'title\'>         </div>', $contents);
  file_put_contents($filename, $new_contents);
    ?>

使用此php脚本读取html文件的内容,如果html文件变大,则使用php替换语法编辑其内容,您可能需要考虑迭代,而不是将所有内容复制到内存中。

代码语言:javascript
复制
        $f = fopen("file","r");
       if($f){
       while( !feof($f) ){
        $line = fgets($f,4096);
      if ( (stripos($line,"<div class=\'title\'><a></a><p></p></div>")!==FALSE) ){
        $line=preg_replace("<div class=\'title\'><a></a><p></p></div>","<div class=\'title\'>         </div>",$line);
      }
      print $line;
     }
   fclose($f);
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26233732

复制
相关文章

相似问题

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