简易PHP抓网页

不包括抓图片?$buffer = file(address); //$address 网页地址for($i = 0;i
sizeof($buffer);$i++){ //去yahoo广告 $buffer[$i] =
str_replace(”!—– ad start —–”,”noscrīpt” $buffer[$i]);
$buffer[$i] = str_replace(”!—– ad end —–”,”/noscrīpt”
$buffer[$i]); //最后显示 echo($buffer);}?str_replace 3个参数
,第一个是原文件的内容,第二个是替换成的内容.最后一个是写入的地方.$buffer能取得整个html页面的文本档,成为一个数组,每行一个元素,简单的说就是逐行寻找替换.替换后输出.同样的可以把烂掉的无法显示的页面
例如成为 这样的替换成对应网址.替换前查看下原HTML档对比下就行.

str_replace可查找替换常规字符,
preg_replace可查找替换回车换行字符(rn)
preg_replace常用在

 代码如下

<meta name=”description” content=”<?php echo
htmlspecialchars(utf_substr(preg_replace(‘/rn/’,”,str_replace(‘
‘,”,strip_tags($this->getDescription()))),400)) ?>”>

内容的过滤,过滤回车换行(rn)等

 代码如下

<a
href=”/%E5%8A%A8%E4%BD%9C%E5%86%92%E9%99%A9_1.html1″>首页</a>
<a href=”/%E5%8A%A8%E4%BD%9C%E5%86%92%E9%99%A9_1.html0″
class=”a1″>上一页</a>

用str_replace函数和preg_replace函数替换成

 代码如下

<a
href=”/%E5%8A%A8%E4%BD%9C%E5%86%92%E9%99%A9_1.html”>首页</a>
<a href=”/%E5%8A%A8%E4%BD%9C%E5%86%92%E9%99%A9_1.html”
class=”a1″>上一页</a>

例子

 代码如下

$pages =
$keyword_data_db->pages;
$pages = str_replace(‘?page=’, ”, $pages);
$pages = preg_replace(‘/_([0-9]+).html([0-9]+)/’, ‘_$2.html’,
$pages);
$pages = str_replace(‘_0.html’, ‘_1.html’, $pages);

再看个比较例子

 代码如下

$str =
‘111111110000000000000000000000000000000111000001000100010000010010000010010000010100000010
‘;
$str = str_repeat($str, 1);
$pattern1 = array(‘12345’=>”, ‘67891’=>”);
$pattern2 = array(‘a’=>”, ‘1234567890’=>”);
$pattern3 = ‘/12345|67891/’;
$pattern4 = ‘/a|1234567890/’;
$pattern5 = array(‘12345’, ‘67891’);
$pattern6 = array(‘a’, ‘1234567890’); 
$t = microtime(true);

echo microtime(true)-$t, “/n”;        //0.4768660068512   
2.7257590293884  
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
     preg_replace($pattern3, ”, $str);
}
echo microtime(true)-$t, “/n”;        //0.30504012107849   
1.0864448547363 
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
     preg_replace($pattern4, ”, $str);
}
echo microtime(true)-$t, “/n”;        //0.30298089981079   
1.117014169693  
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
     str_replace($pattern5, ”, $str);
}
echo microtime(true)-$t, “/n”;        //0.18029189109802   
0.22510504722595 
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
     str_replace($pattern6, ”, $str);
}
echo microtime(true)-$t, “/n”;        //0.18104100227356  
0.23055601119995 
//说明:当str_repeat的第二个参数为1时输出第一个数字,当为8时输出第二个数字

区别

区别就是str_replace被替换(查找)的内容是固定的、确定的,当然可以使用变量,但是变量也表示固定的、确定的内容,比如可以完成把所有的n替换为<br>等场合。

而preg_replace被替换(查找)的内容是用规则来描述的,比如可以把所有的<和>之间的内容(HTML代码)替换掉。当然preg_replace也可以用来替换固定内容。

根据以上规则,所有str_replace能做的事情preg_replace都能办到,但是preg_replace的速度要慢些,使用也要复杂些,所以我们应该尽力使用str_replace。

发表评论

电子邮件地址不会被公开。 必填项已用*标注