1

我正在使用 php,我想以更快的方式从 url 获取内容。
这是我使用的代码。
代码:(1)

<?php
    $content = file_get_contents('http://www.filehippo.com');
    echo $content;
?>

这是读取文件等许多其他方法fopen()readfile()但我认为file_get_contents()比这些方法更快。

在我上面的代码中,当您执行它时,您会看到它提供了该网站的所有内容,甚至包括图像和广告。我只想获得没有 css 样式、图像和广告的计划 html 文本。我怎么能得到这个。
看到这个就明白了。
代码:(2)

<?php
    $content = file_get_contents('http://www.filehippo.com');
    // do something to remove css-style, images and ads.
    // return the plain html text in $mod_content.
    echo $mod_content;
?>

如果我像上面那样做,那么我会走错路,因为我已经在变量中获取了全部内容,$content然后对其进行了修改。
这里可以是任何函数方法或其他任何从 url 获取直接纯 html 文本的方法。

下面的代码只是为了理解而写的,这不是原始的php代码。
理想代码:(3);

<?php
    $plain_content = get_plain_html('http://www.filehippo.com');
    echo $plain_content; // no css-style, images and ads.
?>

如果我能得到这个功能,它会比其他人快得多。能不能。
谢谢。

4

2 回答 2

4

尝试这个。

$content = file_get_contents('http://www.filehippo.com');
$this->html =  $content;
$this->process();
function process(){

    // header
    $this->_replace('/.*<head>/ism', "<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE html PUBLIC '-//WAPFORUM//DTD XHTML Mobile 1.0//EN' 'http://www.wapforum.org/DTD/xhtml-mobile10.dtd'><html xmlns='http://www.w3.org/1999/xhtml'><head>");

    // title
    $this->_replace('/<head>.*?(<title>.*<\/title>).*?<\/head>/ism', '<head>$1</head>');

    // strip out divs with little content
    $this->_stripContentlessDivs();

    // divs/p
    $this->_replace('/<div[^>]*>/ism', '') ;
    $this->_replace('/<\/div>/ism','<br/><br/>');
    $this->_replace('/<p[^>]*>/ism','');
    $this->_replace('/<\/p>/ism', '<br/>') ;

    // h tags
    $this->_replace('/<h[1-5][^>]*>(.*?)<\/h[1-5]>/ism', '<br/><b>$1</b><br/><br/>') ;


    // remove align/height/width/style/rel/id/class tags
    $this->_replace('/\salign=(\'?\"?).*?\\1/ism','');
    $this->_replace('/\sheight=(\'?\"?).*?\\1/ism','');
    $this->_replace('/\swidth=(\'?\"?).*?\\1/ism','');
    $this->_replace('/\sstyle=(\'?\"?).*?\\1/ism','');
    $this->_replace('/\srel=(\'?\"?).*?\\1/ism','');
    $this->_replace('/\sid=(\'?\"?).*?\\1/ism','');
    $this->_replace('/\sclass=(\'?\"?).*?\\1/ism','');

    // remove coments
    $this->_replace('/<\!--.*?-->/ism','');

    // remove script/style
    $this->_replace('/<script[^>]*>.*?\/script>/ism','');
    $this->_replace('/<style[^>]*>.*?\/style>/ism','');

    // multiple \n
    $this->_replace('/\n{2,}/ism','');

    // remove multiple <br/>
    $this->_replace('/(<br\s?\/?>){2}/ism','<br/>');
    $this->_replace('/(<br\s?\/?>\s*){3,}/ism','<br/><br/>');

    //tables
    $this->_replace('/<table[^>]*>/ism', '');
    $this->_replace('/<\/table>/ism', '<br/>');
    $this->_replace('/<(tr|td|th)[^>]*>/ism', '');
    $this->_replace('/<\/(tr|td|th)[^>]*>/ism', '<br/>');

    // wrap and close

}
private function _replace($pattern, $replacement, $limit=-1){
    $this->html = preg_replace($pattern, $replacement, $this->html, $limit);
}

更多信息 - https://code.google.com/p/phpmobilizer/

于 2013-05-27T05:34:36.147 回答
0

您可以使用正则表达式删除css-script的标签和图像的标签,只需将这些代码替换为空格

preg_replace($pattern, $replacement, $string);

有关功能的更多详细信息,请访问此处: http: //php.net/manual/en/function.preg-replace.php

于 2013-05-27T05:01:06.357 回答