使用Simple Html Dom删除一些元素

时间:2012-07-26 22:38:58

标签: php html simple-html-dom

This是我尝试使用Simple Html Dom解析的页面。我已经完成了90%的功能,但由于我是图书馆的新手,我不太确定这样做。

我想抓取每个新闻项目的文本,但由于文本位于<p>元素内,因此使用类似->innertext的内容会将所有内容都包含在内,包括链接

这是我尝试过的:

<h1>Scraper Noticias</h1>

<?php

include('simple_html_dom.php');

class News {
    var $image;
    var $fechanoticia;
    var $title;
    var $description;
    var $sourceurl;

    function get_image( ) {
        return $this->image;
    }

    function set_image ($new_image) {
        $this->image = $new_image;
    }

    function get_fechanoticia( ) {
        return $this->fechanoticia;
    }

    function set_fechanoticia ($new_fechanoticia) {
        $this->fechanoticia = $new_fechanoticia;
    }

    function get_title( ) {
        return $this->title;
    }

    function set_title ($new_title) {
        $this->title = $new_title;
    }

    function get_description( ) {
        return $this->description;
    }

    function set_description ($new_description) {
        $this->description = $new_description;
    }

    function get_sourceurl( ) {
        return $this->sourceurl;
    }

    function set_sourceurl ($new_sourceurl) {
        $this->sourceurl = $new_sourceurl;
    }
}

// Create DOM from URL or file
$html = file_get_html('http://www.uvm.cl/noticias_mas.shtml');

$parsedNews = array();

// Find all news items.
foreach($html->find('#cont2 p') as $element) {

    $newItem = new News;

    // Parse the news item's thumbnail image.
    foreach ($element->find('img') as $image) {
        $newItem->set_image($image->src);
        //echo $newItem->get_image() . "<br />";
    }

    // Parse the news item's post date.
    foreach ($element->find('span.fechanoticia') as $fecha) {
        $newItem->set_fechanoticia($fecha->innertext);
        //echo $newItem->get_fechanoticia() . "<br />";
    }

    // Parse the news item's title.
    foreach ($element->find('a') as $title) {
        $newItem->set_title($title->innertext);
        //echo $newItem->get_title() . "<br />";
    }

    // Parse the news item's source URL link.
    foreach ($element->find('a') as $sourceurl) {
        $newItem->set_sourceurl("http://www.uvm.cl/" . $sourceurl->href);
    }

    // Parse the news items' description text.
    echo $link; //This is the entire <p> tag. How can I get just the text. Not the link?

} 

?>

2 个答案:

答案 0 :(得分:2)

这是我找到的解决方案。虽然如果我可以改进代码,我们将不胜感激。

<h1>Scraper Noticias</h1>

<?php

include('simple_html_dom.php');

class News {
    var $image;
    var $fechanoticia;
    var $title;
    var $description;
    var $sourceurl;

    function get_image( ) {
        return $this->image;
    }

    function set_image ($new_image) {
        $this->image = $new_image;
    }

    function get_fechanoticia( ) {
        return $this->fechanoticia;
    }

    function set_fechanoticia ($new_fechanoticia) {
        $this->fechanoticia = $new_fechanoticia;
    }

    function get_title( ) {
        return $this->title;
    }

    function set_title ($new_title) {
        $this->title = $new_title;
    }

    function get_description( ) {
        return $this->description;
    }

    function set_description ($new_description) {
        $this->description = $new_description;
    }

    function get_sourceurl( ) {
        return $this->sourceurl;
    }

    function set_sourceurl ($new_sourceurl) {
        $this->sourceurl = $new_sourceurl;
    }
}

// Create DOM from URL or file
$html = file_get_html('http://www.uvm.cl/noticias_mas.shtml');

$parsedNews = array();

// Find all news items.
foreach($html->find('#cont2 p') as $element) {

    $newItem = new News;

    // Parse the news item's thumbnail image.
    foreach ($element->find('img') as $image) {
        $newItem->set_image($image->src);
        //echo $newItem->get_image() . "<br />";
    }

    // Parse the news item's post date.
    foreach ($element->find('span.fechanoticia') as $fecha) {
        $newItem->set_fechanoticia($fecha->innertext);
        //echo $newItem->get_fechanoticia() . "<br />";
    }

    // Parse the news item's title.
    foreach ($element->find('a') as $title) {
        $newItem->set_title($title->innertext);
        //echo $newItem->get_title() . "<br />";
    }

    // Parse the news item's source URL link.
    foreach ($element->find('a') as $sourceurl) {
        $newItem->set_sourceurl("http://www.uvm.cl/" . $sourceurl->href);
    }

    // Parse the news items' description text.
    foreach ($element->find('a') as $link) {
        $link->outertext = '';
    }

    foreach ($element->find('span') as $link) {
        $link->outertext = '';
    }

    foreach ($element->find('img') as $link) {
        $link->outertext = '';
    }

    echo $element->innertext;

} 

?>

答案 1 :(得分:0)

使用innertext代替outertext

    foreach ($element->find('a') as $sourceurl) {
    echo $sourceurl->innertext . "<br />";
    }