LINUXQQ

十月 31, 2010

php 采集页面

Filed under: 乱7八糟 — admin @ 11:28 上午

目录

什么是php采集页面?
为什么要采集?
采集哪些页面?
如何写采集页面规则?
采集范例程序
一些常用的函数

对一个目标网站的全面采集
什么是php采集程序?
    php采集程序,也叫php小偷,主要是用于自动搜集网络上web页里特定内容,用php语言写的web程序,运行于支持php的平台上。谈到“自动搜集”,你可能联想到百度goole,联想到搜索引擎所做的事情。php采集程序,正是做类似的工作。
为什么要采集?

    互联网正以飞快的速度在发展,web数据每天以几何级数据量递增,面对这庞大的数据,作为一个网站管理员的你,该如何搜集自己所需要的信息呢?特别对某个或某几个同类网站,你需要它们的大量信息,来充实你的网站内容,难道就只能复制粘贴的过日子吗?一个网站管理员,你真的就得花大量时间去搞原创内容,而与整个互联网信息量的发展速度脱节吗?这些问题的解决方法只有一个:采集。如果有那么一个程序,你帮你的网站自动或半自动的采集你所需要的特定内容,即时更新你网站的信息,是否是你梦寐以求的呢?这就是采集程序出现的原因所在。
采集些什么?

     这要看你做的什么类型的网站了。如果你做图片站,就采集图片;做音乐站,就采集mp3,做新闻站,就采集新闻等等。一切根据你网站的内容架构需要而定。确定你要采集的东西,才好写出相应的采集程序。

[本帖最后由 天涯风云 于 2007-6-3 12:41 编辑]

论坛模式 推荐 收藏 分享给好友 推荐到圈子 管理

TAG:

天涯风云 发布于2007-06-03 11:54:08
如何采集?
如何采集?
    通常采集程序,都是有的放矢的。也就是需要有目标网站,搜集一些你需要的采集内容的网站,分别对其html代码进行分析,找出规律性的东西,依据你要采集的特定内容,写出php代码。采集到你要的东西以后,你可以选择自己需要的存放方式。比如直接生成html页面,或是放进数据库,作进一步处理或是存放成特定的形式,以备后用。
    针对目标网站,我们可以采用以下方式:
1.使用file()函数,获取目标页面文件流,转换成字符串,作进一步处理.
  一个范例函数:
CODE:

//获取目标页面文件流并转换成字符串形式
function openfile($url)
{
if(file($url)){
        $str = file($url);
        $count = count($str);
        for ($i=0;$i<$count;$i++){
        $file .= $str[$i];
                       
                                 }
        return $file;
              } else { die(“文件打开失败!”); }
}
用法举例:
$getstr=openfile(http://www.linuxqq.net);
//getsrt是一个字符串,你可对它作进一步处理。
2.使用file_get_contents()函数,该函数可以直接将获取的web页面内容转换成字符串
CODE:

$getstr=file_get_contents(“http://www.linuxqq.net“);
//getsrt就是一个字符串,你可对它作进一步处理。
3.使用Microsoft.XMLHTTP组件方式。不过该组件需要windows平台支持,它是windows的一个组件,php程序以com形式调用它。
范例程序:
CODE:

<?php
//Microsoft.XMLHTTP组件使用范例程序get.php
//作者:天涯风云
$url=$_GET['id'];
$xmlhttp = new COM(“Microsoft.XMLHTTP”) or die(“无法创建Microsoft.XMLHTTP组件!”);
$xmlhttp->open(“GET”,$url,False, “”, “”);
$xmlhttp->setRequestHeader(“content-Type”,”text/html”);
$xmlhttp->send();
$body=$xmlhttp->responseText;
echo $body;
?>
用法:get.php?id=”目标页面”
4.使用fsockopen()函数,获取文件流
范例程序:
CODE:

function request_url($url,$method=’POST’) {
$url = parse_url($url); //解析url地址,取得host,path,port,query等
if (!$url) return “couldn’t parse url”;
if (!isset($url['port'])) { $url['port'] = “”; }
if (!isset($url['query'])) { $url['query'] = “”; }
//连接服务器
$fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80);
if (!$fp) return “不能连接”.$url['host'].”服务器”;
//发送请求
fputs($fp, sprintf(“$method %s%s%s HTTP/1.0\n”, $url['path'], $url['query'] ? “?” : “”, $url['query']));
fputs($fp, “Host: $url[host]\n”);
fputs($fp, “Content-type: application/x-www-form-urlencoded\n”);
fputs($fp, “Connection: close\n\n”);
//获得请求后返回的内容
$line = fgets($fp,1024);
if (!eregi(“^HTTP/1\.. 200″, $line)) return;
$results = “”;
while(!feof($fp)) {
$line = fgets($fp,1024);
$results .= $line;
}
fclose($fp);
return $results;
}

函数用法:
$getstr=request_url(“目标页面”);
//getstr是一个字符串,你可对它作进一步处理。
[ 本帖最后由 天涯风云 于 2007-6-3 12:14 编辑 ]
天涯风云 发布于2007-06-03 12:24:33
采集范例程序
采集范例程序1
获取sina网上的某个城市的天气信息
//sinatianqi.php
CODE:

<?php
/* 此程序是从新浪网的天气网页[url]http://php.weather.sina.com.cn/search.php?city=[/url]某个城市名,取得天气信息*/
ob_start();  //启动输出缓冲
function request_url($url,$method=’POST’) {
$url = parse_url($url); //解析url地址,取得host,path,port,query等
if (!$url) return “couldn’t parse url”;
if (!isset($url['port'])) { $url['port'] = “”; }
if (!isset($url['query'])) { $url['query'] = “”; }
//连接服务器
$fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80);
if (!$fp) return “不能连接”.$url['host'].”服务器”;
//发送请求
fputs($fp, sprintf(“$method %s%s%s HTTP/1.0\n”, $url['path'], $url['query'] ? “?” : “”, $url['query']));
fputs($fp, “Host: $url[host]\n”);
fputs($fp, “Content-type: application/x-www-form-urlencoded\n”);
fputs($fp, “Connection: close\n\n”);
//获得请求后返回的内容
$line = fgets($fp,1024);
if (!eregi(“^HTTP/1\.. 200″, $line)) return;
$results = “”;
while(!feof($fp)) {
$line = fgets($fp,1024);
$results .= $line;
}
fclose($fp);
return $results;
}
//获得从其它网页传送过来的url(带查询字串)
if (!$_REQUEST['url']) {
echo “请添加一个url”;
exit;
}else{
$url=$_REQUEST['url'];
}
$content=request_url($url); //取得请求后的网页内容
$start=strpos($content,”<!– 天气状况 begin –>”);//取得天气预报的截取段
$end=strpos($content,”<!– 天气状况 end –>”);
$len=$end-$start;
$b=substr($content,$start,$len); //截取得指定内容
//从上面的截取段中取得城市今日天气预报的截取段
$sub_start=strpos($b,”<div class=\”City_Data\”>”); 
$sub_end=strpos($b,”<div class=\”Weather_SM\”>”);
$len2=$sub_end-$sub_start;
$c=substr($b,$sub_start,$len2);
$d=split(“\n”,$c); //去掉换行符
//print_r($d);
$e=”";
foreach ($d as $key=>$value){
$value=strip_tags($value);  //去掉html标记
$e.=$value;
if ($key==2) {
  $e.=”<br>”;
}
}
echo $e;
ob_end_flush();
?>  
程序运行情况:
测试
[ 本帖最后由 天涯风云 于 2007-6-3 12:26 编辑 ]
天涯风云 发布于2007-06-03 12:29:08
采集范例程序
采集范例程序

采集范例程序2:取得tom的天气
CODE:

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
<HTML><HEAD><TITLE>天气预报-天气查询-中国美女网</TITLE>
<META http-equiv=Content-Type content=”text/html; charset=gb2312″><LINK
href=”images/home.css” rel=stylesheet>
<META content=”MSHTML 6.00.3790.2759″ name=GENERATOR></HEAD>
<BODY bgColor=#ffffff leftMargin=0 topMargin=0 marginheight=”0″ marginwidth=”0″>
<center><div>
<TABLE cellSpacing=0 cellPadding=0 width=774 align=center border=0>
  <TBODY>
  <TR>
    <TD><IMG height=100 src=”templates/default/images/top1.jpg” width=770></TD>
  </TR></TBODY></TABLE>
<TABLE height=28 cellSpacing=0 cellPadding=0 width=774 align=center border=0>
  <TBODY>
  <TR>
    <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A
      href=”http://www.needidc.com/” target=_blank>首页</A></TD>
    <TD vAlign=center align=middle width=2
      background=templates/default/images/tt_r4_c1.jpg><IMG height=22
      src=”templates/default/images/tt_r5_c8.jpg” width=1></TD>
    <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A
      href=”http://www.needidc.com/store/
    target=_blank>走光偷拍</A></TD>
    <TD vAlign=center align=middle width=2
      background=templates/default/images/tt_r4_c1.jpg><IMG height=22
      src=”templates/default/images/tt_r5_c8.jpg” width=1></TD>
    <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A
      href=”http://www.needidc.com/store/
    target=_blank>激情诱惑</A></TD>
    <TD vAlign=center align=middle width=2
      background=templates/default/images/tt_r4_c1.jpg><IMG height=22
      src=”templates/default/images/tt_r5_c8.jpg” width=1></TD>
    <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A
      href=”http://www.linuxqq.net/archives/190.html
    target=_blank>清纯女孩</A></TD>
    <TD vAlign=center align=middle width=2
      background=templates/default/images/tt_r4_c1.jpg><IMG height=22
      src=”templates/default/images/tt_r5_c8.jpg” width=1></TD>
    <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A
      href=”http://www.needidc.com/store/
    target=_blank>美女自拍</A></TD>
    <TD vAlign=center align=middle width=2
      background=templates/default/images/tt_r4_c1.jpg><IMG height=22
      src=”templates/default/images/tt_r5_c8.jpg” width=1></TD>
    <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A
      href=”http://www.needidc.com/store/
    target=_blank>明星写真</A></TD>
    <TD vAlign=center align=middle width=2
      background=templates/default/images/tt_r4_c1.jpg><IMG height=22
      src=”templates/default/images/tt_r5_c8.jpg” width=1></TD>
    <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A
      href=”http://www.needidc.com/store/
    target=_blank>性爱健康 </A></TD>
   
    <TD vAlign=center align=middle width=2
      background=templates/default/images/tt_r4_c1.jpg><IMG height=22
      src=”templates/default/images/tt_r5_c8.jpg” width=1></TD>
    <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A
      href=http://www.linuxqq.net target=_blank>免费电影</A></TD>
    <TD vAlign=center align=middle width=2
      background=templates/default/images/tt_r4_c1.jpg><IMG height=22
      src=”templates/default/images/tt_r5_c8.jpg” width=1></TD>
    <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A
      href=”http://www.needidc.com/store/” target=_blank>搞笑图片</A></TD>
  <TD vAlign=center align=middle width=2
      background=templates/default/images/tt_r4_c1.jpg><IMG height=22
      src=”templates/default/images/tt_r5_c8.jpg” width=1></TD>
    <TD vAlign=center align=middle background=templates/default/images/tt_r4_c1.jpg><A
      href=”http://www.needidc.com/store/” target=_blank>天气预报</A></TD>
   </TR></TBODY></TABLE>

<TABLE style=”MARGIN-TOP: 2px” cellSpacing=0 cellPadding=0 width=774
background=images/t2_05.gif border=0>
  <TBODY>
  <TR><td>
<SCRIPT language=JavaScript>
<!—
today = new Date();
var hours = today.getHours();
var minutes = today.getMinutes();
var seconds = today.getSeconds();
var timeValue = “<FONT COLOR=#000000>” + (hours);
timeValue += ((minutes < 10) ? “<FONT COLOR=#000000>:</FONT></BLINK>0″ : “<FONT COLOR=#000000>:</FONT></BLINK>”) + minutes+”</FONT></FONT>”;
function initArray(){
this.length=initArray.arguments.length
for(var i=0;i<this.length;i++)
this[i+1]=initArray.arguments[i] }
var d=new initArray(“<font color=#0000ff>星期天”,”<font color=#000000>星期一”,”<font color=#000000>星期二”,”<font color=#000000>星期三”,”<font color=#000000>星期四”,”<font color=#000000>星期五”,”<font color=#FEFF80>星期六”);
document.write(“<font color=#000000>”,today.getYear(),”年”,”",today.getMonth()+1,”月”,”",today.getDate(),”日 </FONT>”,d[today.getDay()+1],” “); //–>
</SCRIPT>
<font color=#0000ff>(友情提醒:按”Ctrl键+F”查找你所在城市的天气情况)</font><form name=”form1″ action=”http://www.needidc.com/store/shuangxian.php“>
                       <input name=”city” type=”text” size=”20″>
                          <input type=”submit” value=”搜索”>
                      </form>
</TD></TR>  

</TBODY></TABLE>
<TABLE style=”MARGIN-TOP: 2px” cellSpacing=0 cellPadding=0 width=774
background=images/t2_05.gif border=0>
  <TBODY>
  <TR>
    <TD width=20><IMG height=21 src=”images/t2_04.gif” width=13></TD>
    <TD width=153>中国天气查询 </TD>
    <TD width=14><IMG height=21 src=”images/t2_06.gif” width=14></TD>
    <TD align=right background=images/t2_07.gif>
       
数据来源:<A
      href=”http://www.needidc.com/
      target=_blank>中央气象台</A></TD>
    <TD width=7><IMG height=21 src=”images/t2_08.gif”
  width=7></TD></TR></TBODY></TABLE>
<DIV id=guonei_h24 name=”guonei_h24″>
<TABLE cellSpacing=1 cellPadding=1 width=774 bgColor=#ababab border=0>
  <TBODY>

<?php
$str = file(“http://www.linuxqq.net/archives“);
$count = count($str);
for ($i=0;$i<$count;$i++){
    $file .= $str[$i];
}
$tomtq = explode(“<table width=\”774\” border=\”0\” cellspacing=\”1\” cellpadding=\”1\” bgcolor=\”#ABABAB\”>”,$file);
$tomtq = explode(“</table>”,$tomtq[1]);
$tomtq= $tomtq[0];
echo $tomtq;
?>

  </TBODY></TABLE>
  <TABLE cellSpacing=1 cellPadding=0 width=774 align=center border=0>
  <TBODY>
  <TR>
    <TD bgColor=#bbf1ff>
      <TABLE cellSpacing=5 cellPadding=0 width=774 border=0>
        <TBODY>
        <TR>
          <TD align=middle><A href=”http://www.linuxqq.net/archives/190.html
            target=_blank>联系我们</A> <FONT color=#000099>-</FONT>  <A
            onclick=”this.style.behavior=’url(#default#homepage)’;this.setHomePage(‘http://www.86mm.com.cn’);return false;”
            href=”http://www.needidc.com/#”>设置首页</A> <FONT color=#000099>-</FONT>
            <A href=”www.linuxqq.net
            target=_blank>广告服务</A> <FONT color=#000099>-</FONT> <FONT
            color=#ff0000><A href=”http://sms.25vod.com/public/fullscreen/golink.php?smsid=107
            target=_blank>友情链接</A></FONT></TD>
        </TR>
        <TR>
          <TD
            align=middle>本站内容来自于互联网搜索和网友改编、上传,本站提供的视频、音乐片断仅供网友测试使用,<BR>如发现相关内容侵犯了您的权益,请及时联系我们,本站将会及时予以删除<BR>
          联系QQ:231734624
            联系E-mail:wangsua@163.com<BR>
            Copyright ? 2005-2008 86mm.com.cn Inc. All
            rights reserved. 华中美女网 版权所有 <BR><script language=”javascript” type=”text/javascript” src=”http://js.users.51.la/882050.js”></script>
<noscript><a href=”http://www.51.la/?882050” target=”_blank”><img alt=”我要啦免费统计” src=”http://img.users.51.la/882050.asp” style=”border:none” /></a></noscript><a href=http://www.miibeian.gov.cn/>鄂ICP备06012810号</a><BR>
            </TD>
        </TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
 
</DIV>
</CENTER></BODY></HTML>
示范页面:http://86mm.com.cn/tianqi.php
[ 本帖最后由 天涯风云 于 2007-6-5 19:42 编辑 ]
天涯风云 发布于2007-06-03 12:37:12
一些常用的函数

CODE:

// ####################### 获取文件流并转换成字符串 #######################
function openfile($url)
{
if(file($url)){
        $str = file($url);
        $count = count($str);
        for ($i=0;$i<$count;$i++){
        $file .= $str[$i];
                       
                                 }
        return $file;
              } else { die(“文件打开失败!”); }
}
// ####################### 切分字符串 #######################
function cut($start,$end,$file){
        $content=explode($start,$file);
        $content=explode($end,$content[1]);
        return  $content[0];
}
// ####################### 清除垃圾代码 #######################
function del($start,$end,$content){
       $del=cut($start,$end,$content);
       $content=str_replace($del,”",$content);
       $content=str_replace($start.$end,”",$content);
       return $content;
     
    
}
// ####################### 分析域名 #######################
function getname($url)
{
$referer = preg_replace(“/https?:\/\/([^\/]+).*/i”, “\\1“, $url);
$referer = str_replace(“www.”, “”, $referer);
return $referer;
}

// ####################### 清除HTML代码table #######################
function clstable($content)
{
$clscontent= preg_replace(“/<table[^>]*?>.*?<\/table>/si”, “”, $content);
return $clscontent;
}
// ####################### 清除HTML代码script #######################
function clsscript($content)
{
$clscontent= preg_replace(“/<script[^>]*?>.*?<\/script>/si”, “”, $content);
return $clscontent;
}
// ####################### 清除HTML代码div #######################
function clsdiv($content)
{
$clscontent= preg_replace(“/<div[^>]*?>.*?<\/div>/si”, “”, $content);
return $clscontent;
}

// ####################### 清除HTML代码iframe #######################
function clsifr($content)
{
$clscontent= preg_replace(“/<IFRAME[^>]*?>.*?<\/IFRAME>/si”, “”, $content);
return $clscontent;
}

// ####################### 清除HTML代码tr,td #######################
function clstrtd($content)
{
$clscontent= preg_replace(“/<td[^>]*?>.*?<\/td>/si”, “”, $content);
$clscontent= preg_replace(“/<tr[^>]*?>.*?<\/tr>/si”, “”, $clscontent);
$clscontent= preg_replace(“/<tr[^>]*?>/si”,”",$clscontent);
$clscontent= preg_replace(“/<td[^>]*?>/si”,”",$clscontent);
$clscontent= preg_replace(“/<\/tr>/si”,”",$clscontent);
$clscontent= preg_replace(“/<\/td>/si”,”",$clscontent);
return $clscontent;
}
// ####################### 清除HTML代码超链接 #######################
function clsa($content)
{
$clscontent= preg_replace(“/<a[^>]*?>.*?<\/a>/si”, “”, $content);
return $clscontent;
}
// ####################### 彻底清除所有HTML代码#######################
function clearhtml($content)
{
$search = array (“‘<script[^>]*?>.*?</script>’si”,  // 去掉 javascript
                 “‘<[\/\!]*?[^<>]*?>’si”,           // 去掉 HTML 标记
                 “‘([\r\n])[\s]+’”,                 // 去掉空白字符
                 “‘&(quot|#34);’i”,                 // 替换 HTML 实体
                 “‘&(amp|#38);’i”,
                 “‘&(lt|#60);’i”,
                 “‘&(gt|#62);’i”,
                 “‘&(nbsp|#160);’i”,
                 “‘&(iexcl|#161);’i”,
                 “‘&(cent|#162);’i”,
                 “‘&(pound|#163);’i”,
                 “‘&(copy|#169);’i”,
                 “‘&#(\d+);’e”);                    // 作为 PHP 代码运行
$replace = array (“”,
                  “”,
                  “\\1“,
                  “\”",
                  “&”,
                  “<”,
                  “>”,
                  ” “,
                  chr(161),
                  chr(162),
                  chr(163),
                  chr(169),
                  “chr(\\1)”);
$text = preg_replace ($search, $replace, $content);
return $text;
}
// ####################### 写入缓存文件 #######################
function writetocache($cachedir,$cachename, $cachedata = ”) {
    $cachedir = ‘./’.$cachedir.’/';
    $cachefile = $cachedir.$cachename.’.php’;
    if(!is_dir($cachedir)) {
                        @mkdir($cachedir, 0777);
          }
    if(!is_dir($cachedir)) {
      @mkdir($cachedir, 0777);
    }
    if(@$fp = fopen($cachefile, ‘wb’)) {
      @fwrite($fp, $cachedata);
      @fclose($fp);
      @chmod($cachefile, 0777);
    } else {
      echo ‘Can not write to cache files, please check directory ./cache/ .’;
      exit;
    }
}
// ####################### 获取文件里的html链接 #######################
function geturl($re,$ufile,$rep1,$rep2){
preg_match_all ($re,
    $ufile,
    $out, PREG_PATTERN_ORDER);
$result=count($out[1]);
$i=0;
while($i<$result)
{
$outs[$i]=str_replace($rep1,$rep2,$out[1][$i]);
$i++;
}
//合并相同的链接并重新索引…
$reout=array();
$reout=resetar($outs);
return $reout;
}
天涯风云 发布于2007-06-03 13:01:53
对一个目标网站的全面采集
对一个目标网站的全面采集,包括以下几个步聚:
1。分析首页或分类页的html源码
2。依据分析,写出正则表达式,采集首页或分类页面里的链接
3。将链接作为目标页面,进行二次采集。
4.将采集的内容作进一步处理。
[ 本帖最后由 天涯风云 于 2007-6-3 13:27 编辑 ]
天涯风云 发布于2007-06-03 13:28:42
范例:对86mm.com.cn网站的全面采集
范例:对86mm.com.cn网站的全面采集
一,对首页源码分析,找出链接规律
该网站首页源码查看:http://86mm.com.cn/files.php?id=http://86mm.com.cn
分析有效链接:
CODE:

<TR><TD><a href=”html/xingaijiankang/8104.html” target=”_blank” title=”男性生殖保健”>
男性生殖保健</a></TD></TR>
现在我们就要找出形如”html/xingaijiankang/8104.html”类似字符串的所有链接。
[ 本帖最后由 天涯风云 于 2007-6-3 13:39 编辑 ]
天涯风云 发布于2007-06-03 13:37:18
范例:对86mm.com.cn网站的全面采集
二,写正则表达式,找出首页里的所有链接
关键字符串:|<a href=”html/xingaijiankang/8104.html” target=”_blank”|
正则匹配规则:
$re=”|<a href=\”(html\/\w+\/\d{1,5}\.html)\” target=\”_blank\”|U”;
找所有链接,并显示结果:
CODE:

<?php
// ####################### 获取文件里的html链接 #######################
function geturl($re,$ufile,$rep1,$rep2){
preg_match_all ($re,
    $ufile,
    $out, PREG_PATTERN_ORDER);
$result=count($out[1]);
$i=0;
while($i<$result)
{
$outs[$i]=str_replace($rep1,$rep2,$out[1][$i]);
$i++;
}
//合并相同的链接并重新索引…
$reout=array();
$reout=resetar($outs);
return $reout;
}
set_time_limit(0);

$url=$_GET['http://86mm.com.cn'];
$ufile=file_get_contents($url);
$re=”|<a href=\”(html\/\w+\/\d{1,5}\.html)\” target=\”_blank\”|U”;
$rep1=”";
$rep2=”";

$urls=geturl($re,$ufile,$rep1,$rep2);
$result=count($urls);

echo “共找到”.$result.”个链接<br>”;
$i=0;
while($i<$result)
{

$outurl[$i]=”http://www.linuxqq.net/”.$urls[$i];
echo $outurl[$i].”<br>”;
$i++;
}
?>
[ 本帖最后由 天涯风云 于 2007-6-3 13:49 编辑 ]

 
3.JPG

天涯风云 发布于2007-06-03 14:19:09
范例:对86mm.com.cn网站的全面采集
三,对内容页面html源码分析,采集标题和内容(本范例主要采集页面标题和内容)
查看源码:http://www.linuxqq.net/index.php?id= … einvzipai/8061.html
分析:
CODE:

<TITLE>世界上最搞笑的屁股⌒-mianfeidianying,中国美女网,性爱,免费,短片,视频,恶搞,搞笑图片</TITLE>
这部分可以用cut(“<TITLE>”,”</TITLE>”,$file)直接获取,然后把后面多余的尾巴换掉。
主要内容部分集中在
CODE:

<td height=”15″ valign=”top”>…………..<!–流量交换–>
这一区间内,我们可以再次cut()一下,取得内容。
这样标题我内容就全获取了。。
具体实现代码:
CODE:

<?php
// ####################### 切分文件流 #######################
function cut($start,$end,$file){
        $content=explode($start,$file);
        $content=explode($end,$content[1]);
        return  $content[0];
}
// ####################### 清除垃圾代码 #######################
function del($start,$end,$content){
       $del=cut($start,$end,$content);
       $content=str_replace($del,”",$content);
       $content=str_replace($start.$end,”",$content);
       return $content;
     
    
}
set_time_limit(0);

$url=$_GET['id'];
$files=file_get_contents($url);
$title=cut(“<TITLE>”,”</TITLE>”,$files);
//清除标题后面的多余字符串
$title=str_replace(“-mianfeidianying,中国美女网,性爱,免费,短片,视频,恶搞,搞笑图片”,”",$title);
$content=cut(“<td height=\”15\” valign=\”top\”>”,”<!–流量交换–>”
,$files);
//清除内容里的一句广告词
$content=del(“<font color=red>”,”</font>”,$content);

echo $title.”<br>”;
echo $content;
?>
这样,我们就可以获取一个页面内的标题和内容了。。
[ 本帖最后由 天涯风云 于 2007-6-3 14:29 编辑 ]

 
4.GIF

天涯风云 发布于2007-06-03 14:58:50
范例:对86mm.com.cn网站的全面采集
四,批量获取首页里所有链接的标题和内容,并以php文件的形式保存。
  下面,我们要用程序依次打开86mm.com.cn首页里所有链接,并取得相应的标题和内容,存为php文件,当然你可以生成其它格式的文件或放进数据库里,这以个人需要而定。
代码如下:
CODE:

<?php
// ####################### 获取文件里的html链接 #######################
function geturl($re,$ufile,$rep1,$rep2){
preg_match_all ($re,
    $ufile,
    $out, PREG_PATTERN_ORDER);
$result=count($out[1]);
$i=0;
while($i<$result)
{
$outs[$i]=str_replace($rep1,$rep2,$out[1][$i]);
$i++;
}
//合并相同的链接并重新索引…
$reout=array();
$reout=resetar($outs);
return $reout;
}
// ####################### 切分文件流 #######################
function cut($start,$end,$file){
        $content=explode($start,$file);
        $content=explode($end,$content[1]);
        return  $content[0];
}
// ####################### 清除垃圾代码 #######################
function del($start,$end,$content){
       $del=cut($start,$end,$content);
       $content=str_replace($del,”",$content);
       $content=str_replace($start.$end,”",$content);
       return $content;
     
    
}
// ####################### 清除数组里的重复值并重新索引数组 #######################
function resetar($outs){
$reout=array();
$reouts=array();
$reout=array_unique($outs);
foreach($reout as $key=>$value){
array_push($reouts,$value);
}
return $reouts;
}
// ####################### 写入缓存文件 #######################
function writetocache($cachedir,$cachename, $cachedata = ”) {
    $cachedir = ‘./’.$cachedir.’/';
    $cachefile = $cachedir.$cachename.’.php’;
    if(!is_dir($cachedir)) {
                        @mkdir($cachedir, 0777);
          }
    if(!is_dir($cachedir)) {
      @mkdir($cachedir, 0777);
    }
    if(@$fp = fopen($cachefile, ‘wb’)) {
      @fwrite($fp, “<?php\r\n//天涯风云,版权所有\r\n//Created on \r\n\r\n”.$cachedata.”\r\n\r\n?>”);
      @fclose($fp);
      @chmod($cachefile, 0777);
    } else {
      echo ‘Can not write to cache files, please check directory ./cache/ .’;
      exit;
    }
}
// ####################### 创建缓存文件 #######################
function content_recache($cachedir,$i,$title,$content) {
 
  $contents = “\$catecache = array(\r\n”;
    $contents.=”\t’title’ => ‘”.$title.”‘,\r\n’content’=> ‘”.$content.”‘\r\n”;
  $contents .= “);”;
  writetocache($cachedir,$i,$contents);
echo “./”.$cachedir.”/”.$i.”.php文件创建成功!<br>”;
}
set_time_limit(0);

$url=’http://86mm.com.cn’;
$ufile=file_get_contents($url);
$re=”|<a href=\”(html\/\w+\/\d{1,5}\.html)\” target=\”_blank\”|U”;
$rep1=”";
$rep2=”";

$urls=geturl($re,$ufile,$rep1,$rep2);
$result=count($urls);

echo “共找到”.$result.”个链接<br>”;
$i=0;
while($i<$result)
{

$outurl[$i]=”http://www.linuxqq.net/”.$urls[$i];//对取得的链接加域名,得到实际地址
echo $outurl[$i].”<br>”;
$files[$i]=file_get_contents($outurl[$i]);
$title[$i]=cut(“<TITLE>”,”</TITLE>”,$files[$i]);
$title[$i]=str_replace(“-mianfeidianying,中国美女网,性爱,免费,短片,视频,恶搞,搞笑图片”,”",$title[$i]);
$content[$i]=cut(“<td height=\”15\” valign=\”top\”>”,”<!–流量交换–>”
,$files[$i]);
//清除内容里的一句广告词
$content[i]=del(“<font color=red>”,”</font>”,$content[i]);

//将取得的标题和内容写入文件
content_recache(“86mm”,$i,$title[$i],$content[$i]);
$i++;
}

?>
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/binger819623/archive/2009/03/12/3985592.aspx

十月 30, 2010

虚拟主机配置REWRITE模块

Filed under: linux — admin @ 11:42 上午

#限制IP访问
NameVirtualHost 192.168.1.1
<VirtualHost 192.168.1.1>
 ServerName 192.168.1.1
    DocumentRoot /usr/local/apache/htdocs/linuxqq/error
    ErrorLog “logs/403.com-error_log”
    CustomLog “logs/403.com-access_log” common
</VirtualHost>

#加载伪静态
<VirtualHost 192.168.1.1>
    ServerAdmin linuxqq@linuxqq.net
    DocumentRoot “/usr/local/apache/htdocs/linuxqq”
    ServerName  www.linuxqq.net
    ErrorLog “logs/linuxqq.net-error_log”
    CustomLog “logs/linuxqq.net-access_log” common
    RewriteLogLevel 9
    RewriteLog logs/rewrite.log
    <Directory /usr/local/apache/htdocs/tencentbak/mdd>
    Options FollowSymLinks MultiViews
    RewriteEngine on
    AllowOverride All
    Order allow,deny
    allow from all
    </Directory>
</VirtualHost>

十月 29, 2010

最新监测mysql复制并恢复

Filed under: linux — admin @ 5:09 下午

#!/bin/sh
#
# created by yejr, 2010/10/30
#
# 此脚本参考mysql中文网原作者叶金荣,脚本经过linuxqq修改完善
# 如有高见发邮件至linuxqq@linuxqq.net
# 后续作者在本机部署了3个MYSQL,双主一从架构.
#
now=`date +”%Y%m%d%H%M%S”`
user=”root”
PASS=”123456″
StatFile=”./slave_status.$now”
StopFile=”./slave_stopus.$new”
export  Errno

# 此函数MYSQL是否运行正常
function chkcstatus(){
echo “show slave status\G” | mysql –defaults-file=/etc/my1.cnf -uroot -p$PASS > $StatFile
echo $StatFile
#取得 io_thread, sql_thread, last_errno 的状态
IoStat=`cat $StatFile | grep Slave_IO_Running | awk ‘{print $2}’`
SqlStat=`cat $StatFile | grep Slave_SQL_Running | awk ‘{ print $2}’`
Errno=`cat $StatFile | grep Last_Errno | awk ‘{print $2}’`
Behind=`cat $StatFile | grep Seconds_Behind_Master | awk ‘{print $2}’`

#IoStat=`cat $StatFile | head -n 12 | tail -n 1 | awk ‘{print $2}’`
#SqlStat=`cat $StatFile | head -n 13 | tail -n 1 | awk ‘{print $2}’`
#Errno=`cat $StatFile | head -n 20 | tail -n 1 | awk ‘{print $2}’`
if [ $IoStat = 'No' ] || [ $SqlStat = 'No' ] ; then
  echo “[chkslave]”
  return 1;
 fi
}
#此函数删除原有数据库导入最新数据,保证复制运行状态正常
function Repair(){
# 执行备份主数据操作,并且读取主BINLOG日志存放位置
mysqldump -uroot -p$PASS –default-character-set=utf8  pigeon_race >/root/sql.sql
  echo “FLUSH TABLES WITH READ LOCK; show master status;” |mysql –defaults-file=/etc/my.cnf -uroot -p$PASS >$StopFile
  MastFile=`cat $StopFile | grep mysql-bin | awk ‘{print $1}’`
  PosFile=`cat $StopFile | grep mysql-bin | awk ‘{print $2}’`
# 执行删除 自动导入操作
  echo “stop slave; drop database pigeron_race;create database pigeon_race default character set utf8 collate utf8_general_ci; \
  set names utf8;source /root/sql.sql; change master to master_host=’127.0.0.1′, master_user=’mysql1′, master_password=’mysql1admin’, master_log_file=”$MastFile” , master_log_pos=”$PosFile”; start slave;” | mysql –defaults-file=/etc/my1.cnf -uroot -p$PASS
  echo “stop slave; drop database pigeron_race;create database pigeon_race default character set utf8 collate utf8_general_ci; \
  set names utf8;source /root/sql.sql; change master to master_host=’127.0.0.1′, master_user=’mysql1′, master_password=’mysql1admin’, master_log_file=”$MastFile” , master_log_pos=”$PosFile”; start slave;” | mysql –defaults-file=/etc/my2.cnf -uroot -p$PASS
  echo “unlock tables;” | mysql –defaults-file=/etc/my.cnf -uroot -p$PASS
}
if [ chkstatus == 1 ] ; then
 #错误代码为 0,则可能是因为网络等原因导致复制中断,直接重新启动复制即可
 if [ "$Errno" -eq 0 ] ; then
  echo “start slave io_thread; start slave sql_thread;” | mysql –defaults-file=/etc/my1.cnf -uroot -p$PASS
  echo “start slave io_thread; start slave sql_thread;” | mysql –defaults-file=/etc/my2.cnf -uroot -p$PASS
 #如果是一些不是很要紧的错误代码,也可以直接略过
 elif [ "$Errno" -eq 1007 ] || [ "$Errno" -eq 1053 ] || [ "$Errno" -eq 1062 ] || [ "$Errno" -eq 1213 ] \
|| [ "$Errno" -eq 1158 ] || [ "$Errno" -eq 1159 ] || [ "$Errno" -eq 1008 ] ; then
  echo “stop slave; set global sql_slave_skip_counter=1; slave start;” | mysql –defaults-file=/etc/my1.cnf -uroot -p$PASS
  echo “stop slave; set global sql_slave_skip_counter=1; slave start;” | mysql –defaults-file=/etc/my2.cnf -uroot -p$PASS
   if [ chkstatus == 1 ] ;then
     Repair
     echo “repair mysql OK!”
  else
     echo “repair Failure”
    fi
  fi
fi
 
#删除临时文件
rm -f $StatFile
rm -f $StopFile
echo “[/chkslave]”

转载注明(LINUXQQ)

十月 28, 2010

mysql 监测脚本

Filed under: linux — admin @ 9:47 上午

#!/bin/sh
#
# created by yejr, 2007/06/03
#
# 本脚本用于监控MySQL 复制是否运行,并且根据具体的错误代码自动判断是否忽略
#

now=`date +”%Y%m%d%H%M%S”`

StatFile=”./slave_status.$now”

echo “show slave status\G” | mysql -uroot -pmypasswd > $StatFile

#取得 io_thread, sql_thread, last_errno 的状态
IoStat=`cat $StatFile | grep Slave_IO_Running | awk ‘{print $2}’`
SqlStat=`cat $StatFile | grep Slave_SQL_Running | awk ‘{ print $2}’`
Errno=`cat $StatFile | grep Last_Errno | awk ‘{print $2}’`
Behind=`cat $StatFile | grep Seconds_Behind_Master | awk ‘{print $2}’`

#IoStat=`cat $StatFile | head -n 12 | tail -n 1 | awk ‘{print $2}’`
#SqlStat=`cat $StatFile | head -n 13 | tail -n 1 | awk ‘{print $2}’`
#Errno=`cat $StatFile | head -n 20 | tail -n 1 | awk ‘{print $2}’`

if [ $IoStat = 'No' ] || [ $SqlStat = 'No' ] ; then

echo “[chkslave]”
date
#如果错误代码为 0,则可能是因为网络等原因导致复制中断,直接重新启动复制即可
if [ "$Errno" -eq 0 ] ; then
  echo “start slave io_thread; start slave sql_thread;” | mysql -uroot -pmypasswd
  echo “start slave io_thread; start slave sql_thread;”
#如果是一些不是很要紧的错误代码,也可以直接略过
elif [ "$Errno" -eq 1007 ] || [ "$Errno" -eq 1053 ] || [ "$Errno" -eq 1062 ] || [ "$Errno" -eq 1213 ] \
|| [ "$Errno" -eq 1158 ] || [ "$Errno" -eq 1159 ] || [ "$Errno" -eq 1008 ] ; then
  echo “stop slave; set global sql_slave_skip_counter=1; slave start;” | mysql -uroot -pmypasswd
  echo “stop slave; set global sql_slave_skip_counter=1; slave start;”
else
  echo `date` “slave is down!!!”
fi

# 远远落后于 master
if [ $Behind -gt 200 ] ; then
   echo `date` “slave is behind master $Behind seconds!!!”
fi

#删除临时状态文件
rm -f $StatFile

echo “[/chkslave]”

fi

转载

ysql中文网

十月 27, 2010

北京服务器托管

Filed under: 乱7八糟 — admin @ 11:03 上午

  北京服务器托管与LINUX发展强大有着很重要的牵连因素.现在托管IDC越来越多的公司正在使用LINUX系统,可见LINUX系统的市场多么庞大.LINUXQQ联手北京服务器托管专家推出服务器托管就送维护活动:

   活动只针对在本公司租用服务器并且独享2M以上的用户,系统须是LINUX系统.我们将送半年全权维护

  依托我们强大的技术实力确保你的服务器在我们的机房,我们的维护正常畅通

详情请登陆官方网站:灵动网络  此活动仅限一个月

十月 26, 2010

mysql 检测是否存活并重启

Filed under: linux — admin @ 1:34 下午

#!/bin/bash
MUSER=”root”

MPASS=”123456

MRESET=”/etc/rc.d/init.d/mysql restart”

MADMIN=”/usr/local/mysql/bin/mysqladmin”
while true
 do
$MADMIN -u$MUSER -p$MPASS ping 2>/dev/null 1>/dev/null
if [ $? -ne 0 ];then
     echo “server is not respinse waring:127.0.0.1″ >>/var/log/mysql.log
     $MRESET >/dev/null 

   else
      echo “mysql operating normally” >>/var/log/mysql.log
  fi
  sleep 5
 done

十月 25, 2010

mysql 5.0 优化

Filed under: linux — admin @ 10:04 上午

port            = 3306
socket          = /tmp/mysql.sock
skip-locking
key_buffer_size = 4294963200
max_allowed_packet = 32M
table_open_cache = 32000
sort_buffer_size = 128M
net_buffer_length = 512K
read_buffer_size = 128M
read_rnd_buffer_size = 128M
myisam_sort_buffer_size = 128M
user=mysql
query_cache_siz = 32M
max_connections=3000
thread_cache_size=128
wait_timeout=120
interactive_timeout=31536000

转载注明(LINUXQQ)

十月 24, 2010

查看APACHE连接数

Filed under: linux — admin @ 11:53 上午

查看APACHE并发端口连接数watch -n 1 -d “pgrep httpd|wc -l”

十月 23, 2010

(tomcat) Tomcat is down or refused connection. No response has been sent to the client (yet)

Filed under: linux — admin @ 10:46 上午

(tomcat) Tomcat is down or refused connection. No response has been sent to the client (yet) 或者connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=111) 这样的错误 都是因为高并发到1000的时候 就出这样的错误 开始我也以为是TOMCAT 有问题 于是部署了5个TOMCAT 但效果都一样 后来发现 TOMCAT和JK 是通过AJP13端口去处理的 所以应该优化的是SERVER.XML里面的AJP13

把你优化的参数把参数加到 <Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″
    connectionTimeout=”200000″  maxThreads=”2000″ acceptCount=”500″
            />

加到这个AJP/1.3里面去 就好了!

转载注明(LINUXQQ)

十月 21, 2010

apache +mod_jk+tomcat 高并发优化

Filed under: linux — admin @ 12:27 下午

 apache +mod_jk+tomcat 高并发优化

本机部署了多个MYSQL 多个TOMCAT 并发大概5000

主要配置JK  和TOMCAT下的server.xml

以下是我的配置效果还算不错

workers.java_home=/usr/local/jdk
    ps=/
    worker.list=controller,tomcat,tomcat1,tomcat2,tomcat3,tomcat4,tomcat5
    worker.tomcat.port=8009
    worker.tomcat.host=localhost
    worker.tomcat.type=ajp13
    worker.tomcat.lbfactor=1

    worker.tomcat5.port=11009
    worker.tomcat5.host=localhost
    worker.tomcat5.type=ajp13
    worker.tomcat5.socket_keepalive=1
    worker.tomcat5.lbfactor=1

    worker.tomcat1.port=10003
    worker.tomcat1.host=localhost
    worker.tomcat1.type=ajp13
    worker.tomcat1.socket_keepalive=1
    worker.tomcat1.lbfactor=1

    worker.tomcat2.port=10006
    worker.tomcat2.host=localhost
    worker.tomcat2.type=ajp13
    worker.tomcat2.lbfactor=1

     worker.tomcat3.port=7003
     worker.tomcat3.host=localhost
     worker.tomcat3.type=ajp13
     worker.tomcat3.lbfactor=1

     worker.tomcat4.port=9199
     worker.tomcat4.host=localhost
     worker.tomcat4.type=ajp13
     worker.tomcat4.lbfactor=1

    worker.controller.type=lb
    worker.controller.balance_workers=tomcat,tomcat1,tomcat2,tomcat3,tomcat4,tomcat5
    worker.controller.sticky_session=1
    worker.status.type=status

     worker.controller.sticky_session=1
    worker.status.type=status
    worker.controller.recovery_options=3
    worker.controller.socket_keepalive=True
    worker.controller.connection_pool_size=120
    worker.controller.connection_pool_minsize=0
    worker.controller.connection_pool_timeout=20000

以下2参数重要

worker.controller.recovery_options=3
worker.controller.connection_pool_minsize=0

 下面是SERVER.XML的配置

 <Connector port=”8080″ protocol=”HTTP/1.1″
               maxHttpHeaderSize=”8192″ useBodyEncodingForURI=”true”
               acceptCount=”500″
               maxThreads=”2000″
               minSpareThreads=”100″
               maxSpareThreads=”2000″
               tcpNoDelay=”true”
               socketBuffer=”4096″
               enableLookups=”false”
               redirectPort=”8443″
               connectionTimeout=”200000″  />
    <!– A “Connector” using the shared thread pool–>
    <!–
    <Connector executor=”tomcatThreadPool”
               port=”8080″ protocol=”HTTP/1.1″
               connectionTimeout=”20000″
               redirectPort=”8443″ />
    –>
    <!– Define a SSL HTTP/1.1 Connector on port 8443
         This connector uses the JSSE configuration, when using APR, the
         connector should be using the OpenSSL style configuration
         described in the APR documentation –>
    <!–
    <Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”
               maxThreads=”150″ scheme=”https” secure=”true”
               clientAuth=”false” sslProtocol=”TLS” />
    –>

    <!– Define an AJP 1.3 Connector on port 8009 –>
    <Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″
    connectionTimeout=”200000″  maxThreads=”2000″ acceptCount=”500″
            />

   注意 :压力大了 会抱JK连不到TOMCAT的错误 我也找了好久 是JK仍给TOMCAT是通过AJP13端口去处理 所有优化AJP13

把参数加到 <Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″
    connectionTimeout=”200000″  maxThreads=”2000″ acceptCount=”500″
            />

就没什么问题了 大家可以试下

转载注明(LINUXQQ)

Older Posts »

Powered by LINUXQQ   ICP 10203065