初级的用php写的采集程序
2018-09-07 14:08
可以先用这个采集然后在用帝国处理
<?php
####################################################################################
#作者:9elong
#网站:个人小站不值一提
#时间:2007-01-01
#声明:仅用于学习php之用。
#功能:采集单页面图片。
#说明:3个示范表单已经写好正则用来示范。没有任何功能说明,一切都在源代码里。附加论坛图片采集正则示范
####################################################################################
//把图片从信息页抓取下来的函数
functiongetimg($url,$n,$key,$imgqian,$imgbiao,$titlekey)
{
//$key图片地址正则
//$titlekey图片标题正则
//$imgqian图片地址前缀
//$imgbiao图片地址特殊标识
global$n;
global$msg;
global$result;
global$imgadd;
global$title;
$msg=file_get_contents($url);
$key=str_replace({图片地址},(.+),$key);
$key=.$key.isU;
preg_match_all($key,$msg,$result);
$c=count($result[0]);
for($i=0;$i<$c;$i++)
{
$img=$result[0][$i].<br>;
if(ereg(^.*.$imgbiao..*$,$img))
{
$img=str_replace($imgbiao,$imgqian.$imgbiao,$img);
preg_match(
$imgadd[$n]=$img[0];
//echo<imgsrc=.($img[0]).><br>;
$n++;
}
elseif(ereg(^.*jpg.*$,$img))
{
preg_match(
$imgadd[$n]=$img[0];
if($img[0]!=)
$n++;
}
unset($img);
}
$titlekey=str_replace({图片标题},(.+),$titlekey);
$titlekey=.$titlekey.isU;
preg_match($titlekey,$msg,$title);
//echo$title[0];
return$title;
return$msg;
return$result;
return$n;
return$imgadd;
}
####################################################################################
#不支持file_get_contents()函数可以使用下面的替换
#$i=0;
#$handle=@fopen($url,rb);
#while(!@feof($handle))
#{
#$buffer[$i]=@fgets($handle,4096);
#$i++;
#}
#fclose($handle);
#$msg=join(,$buffer);
####################################################################################
if($_GET[act]==getimgadd&&$_POST[url]!=)
{
$url=$_POST[url];
getimg($url,0,$_POST[key],$_POST[imgqian],$_POST[imgbiao],$_POST[titlekey]);
####################################################################################
//获取分页
if($_POST[getpage]==是)
{
$_POST[page]=str_replace({分页地址},(.+),$_POST[page]);
$page=.$_POST[page].isU;
//echo$page;
preg_match_all($page,$msg,$presult);
if($_POST[pc]==$_POST[pc]==全部)
$pc=count($presult[0]);
else
$pc=$_POST[pc];
if($_POST[pc]>count($presult[0]))
$pc=count($presult[0]);
for($i=1;$i<$pc;$i++)
{
$pageurl=$presult[0][$i];
//echo$pageurl.<br>;
if(ereg(^.*[1-9].*$,$pageurl))
{
$pageurl=str_replace(<ahref=,<ahref=.$_POST[imgqian],$pageurl);
$pagekey=str_replace({关键地址},(.+),$_POST[pagekey]);
$pagekey=.$pagekey.isU;
preg_match($pagekey,$pageurl,$N3[$i]);
//echo($N3[$i][0]).<br>;
getimg($N3[$i][0],$n,$_POST[key],$_POST[imgqian],$_POST[imgbiao],$_POST[titlekey]);
}
}
}
####################################################################################
echo图片集〖.$title[1].〗.$n.张图片被抓取<br><ahref=?act=>返回首页</a><br>;
while(list($num,$var)=each($imgadd))
{
if($_POST[showtype]==图片)
{
echo<imgsrc=.$var.><br>;
}
else
echo$var.<br>;
}
####################################################################################
//exit();
}
?>
实例1(信息页有分页,使用了简单的分页正则):
<FORMMETHOD=POSTACTION=?act=getimgadd>
输入图片地址<INPUTTYPE=textNAME=urlsize=80value=
图片地址正则<INPUTTYPE=textNAME=keysize=80value=<img{图片地址}>><br>
图片地址前缀<INPUTTYPE=textNAME=imgqiansize=80value=
图片地址标识<INPUTTYPE=textNAME=imgbiaosize=80value=upload><br>
图片标题正则<INPUTTYPE=textNAME=titlekeysize=80value=<H1class=aTitle>{图片标题}</H1></DIV>><br>
分页地址正则<INPUTTYPE=textNAME=pagesize=80value=<ahref={分页地址}shtml>.[0-9]><br>
分页地址模式<INPUTTYPE=textNAME=pagekeysize=80value=关键地址}shtml><br>
<SELECTNAME=getpage>
<optionvalue=是selected=selected>获取分页信息</option>
<optionvalue=否>不要分页信息</option>
</SELECT><br>
<SELECTNAME=pc>
<optionvalue=1selected=selected>获取1页</option>
<optionvalue=2>获取2页</option>
<optionvalue=3>获取3页</option>
<optionvalue=4>获取4页</option>
<optionvalue=5>获取5页</option>
<optionvalue=全部>获取全部</option>
</SELECT><br>
<SELECTNAME=showtype>
<optionvalue=图片selected=selected>直接显示图片</option>
<optionvalue=文字>直接显示地址</option>
</SELECT><br>
<INPUTTYPE=submit>
</FORM><br>
实例2(信息页没有分页,所以分页正则为空):
<FORMMETHOD=POSTACTION=?act=getimgadd>
输入图片地址<INPUTTYPE=textNAME=urlsize=80value=
图片地址正则<INPUTTYPE=textNAME=keysize=80value=<IMGsrc=/UpLoad{图片地址}jpg><br>
图片地址前缀<INPUTTYPE=textNAME=imgqiansize=80value=
图片地址标识<INPUTTYPE=textNAME=imgbiaosize=80value=UpLoad><br>
图片标题正则<INPUTTYPE=textNAME=titlekeysize=80value=<spanid=_ctl0_TitleLabelclass=Title>{图片标题}</span></TD>><br>
分页地址正则<INPUTTYPE=textNAME=pagesize=80value=><br>
分页地址模式<INPUTTYPE=textNAME=pagekeysize=80value=><br>
<SELECTNAME=getpage>
<optionvalue=是>获取分页信息</option>
<optionvalue=否selected=selected>不要分页信息</option>
</SELECT><br>
<SELECTNAME=pc>
<optionvalue=1selected=selected>获取1页</option>
<optionvalue=2>获取2页</option>
<optionvalue=3>获取3页</option>
<optionvalue=4>获取4页</option>
<optionvalue=5>获取5页</option>
<optionvalue=全部>获取全部</option>
</SELECT><br>
<SELECTNAME=showtype>
<optionvalue=图片selected=selected>直接显示图片</option>
<optionvalue=文字>直接显示地址</option>
</SELECT><br>
<INPUTTYPE=submit>
</FORM><br>
实例3(信息页没有分页,所以分页正则为空,图片为绝对地址,所以图片地址前缀为空):
<FORMMETHOD=POSTACTION=?act=getimgadd>
输入图片地址<INPUTTYPE=textNAME=urlsize=80value=
图片地址正则<INPUTTYPE=textNAME=keysize=80value=<P><IMG{图片地址}></P>><br>
图片地址前缀<INPUTTYPE=textNAME=imgqiansize=80value=><br>
图片地址标识<INPUTTYPE=textNAME=imgbiaosize=80value=UpLoad><br>
图片标题正则<INPUTTYPE=textNAME=titlekeysize=80value=<divalign=right><b>{图片标题}</b></div></td>><br>
分页地址正则<INPUTTYPE=textNAME=pagesize=80value=><br>
分页地址模式<INPUTTYPE=textNAME=pagekeysize=80value=><br>
<SELECTNAME=getpage>
<optionvalue=是>获取分页信息</option>
<optionvalue=否selected=selected>不要分页信息</option>
</SELECT><br>
<SELECTNAME=pc>
<optionvalue=1selected=selected>获取1页</option>
<optionvalue=2>获取2页</option>
<optionvalue=3>获取3页</option>
<optionvalue=4>获取4页</option>
<optionvalue=5>获取5页</option>
<optionvalue=全部>获取全部</option>
</SELECT><br>
<SELECTNAME=showtype>
<optionvalue=图片selected=selected>直接显示图片</option>
<optionvalue=文字>直接显示地址</option>
</SELECT><br>
<INPUTTYPE=submit>
</FORM><br>
华声论坛图片为附件
图片地址正则:upload=jpg{图片地址}upload
图片地址标识:bbs
图片标题正则:帖子主题</B>:{图片标题}</th>
华声论坛图片为外链
图片地址正则:img]{图片地址}/img
图片地址标识:jpg
图片标题正则:帖子主题</B>:{图片标题}</th>