如何使用php通过id抓取一个div的html内容

时间:2013-08-08 10:39:46

标签: php html web-scraping scrape

我想要从其中删除一个div的另一个域的页面包含:

<div id="thisone">
    <p>Stuff</p>
</div>

<div id="notthisone">
    <p>More stuff</p>
</div>

使用这个php ...

<?php
    $page = file_get_contents('http://thisite.org/source.html');
    $doc = new DOMDocument();
    $doc->loadHTML($page);
    foreach ($doc->getElementsByTagName('div') as $node) {
        echo $doc->saveHtml($node), PHP_EOL;
    }
?>

...用html给我http://thisite.org/source.html上的所有div。但是,我只想通过id为“thisone”的div来使用:

foreach ($doc->getElementById('thisone') as $node) {

没有提出任何建议。

3 个答案:

答案 0 :(得分:4)

$doc->getElementById('thisone');// returns a single element with id this one

尝试$node=$doc->getElementById('thisone');,然后打印$node

另外,您可以将phpQuery用于类似syntext的jquery:pq("#thisone")

答案 1 :(得分:0)

$doc->getElementById('thisone')返回单个DOMElement,而不是数组,因此您无法遍历它

只是这样做:

$node = $doc->getElementById('thisone');
echo $doc->saveHtml($node), PHP_EOL;

答案 2 :(得分:0)

查看PHP手册http://php.net/manual/en/domdocument.getelementbyid.php getElementByID返回一个元素或NULL。不是数组,因此你不能迭代它。

而是这样做

<?php
    $page = file_get_contents('example.html');
    $doc = new DOMDocument();
    $doc->loadHTML($page);
    $node = $doc->getElementById('thisone');
     echo $doc->saveHtml($node), PHP_EOL;
?>

跑步 php edit.php你得到类似的东西

<div id="thisone">
      <p>Stuff</p>
  </div>