采集的实现_PHP
程序员文章站
2023-12-26 16:41:57
...
采集
一般是本机运行,放到空间上是不明智的,因为不但很耗资源还需要支持远程抓取函数,比如file_get_contents($urls)file($url)等.
1,文章列表页面的自动切换,以及文章路径的获得.
2,获得:标题,内容
3,入库
4,问题
1,文章列表页面的自动切换,以及文章路径的获得.
a,列表页面的自动切换一般依赖动态页面来实现.比如
//2004-11-22 clinch
//$e=clinchgeturl("[url]im286.com/forumdisplay.php?fid=1");[/url]
//var_dump($e);
function clinchgeturl($url)
{
//$url="[url]127.0.0.1/1.htm";[/url]
//$rootpath="[url]fsrootpathfsfsf/yyyyyy/"; [/url]
//var_dump($rrr);
if(eregi('(.)*[\.](.)*',$url)){
$roopath=split("\/",$url);
$rootpath="[url]"[/url].$roopath[2]."/";
$nnn=count($roopath)-1;for($yu=3;$yu$nnn;$yu++){$rootpath.=$roopath[$yu]."/";}
// var_dump($rootpath); //http: ,'',127.0.0.1,xnml,index.php
}
else{$rootpath=$url; //var_dump($rootpath);
}
if(isset($url)){
echo "$url 有下列裢接:
";
$fcontents = file($url);
while(list(,$line)=each($fcontents)){
while(eregi('(href[[:space:]]*=[[:space:]]*"?[[:alnum:]:@/._-]+[\?]?[^\"]*"?)',$line,$regs)){
//$regs[1] = eregi_replace('(href[[:space:]]*=[[:space:]]*\"?)([[:alnum:]:@/._-]+)(\"?)',"\\2",$regs[1]);
$regs[1] = eregi_replace('(href[[:space:]]*=[[:space:]]*[\"]?)([[:alnum:]:@/._-]+[\?]?[^\"]*)(\.*)[^\"\/]*([\"]?)',"\\2",$regs[1]);
if(!eregi('^http:\/\/',$regs[1])){
if(eregi('^\.\.',$regs[1])){
// $roopath=eregi_replace('(http:\/\/)?([[:alnum:]:@/._-]+)[[:alnum:]+](\.*)[[:alnum:]+]',"http:\/\/\\2",$url);
$roopath=split("\/",$rootpath);
$rootpath="[url]"">http://www.im286.com/foru[/url] ... d=1&page=$i
可以在后面利用$i的自动增加或范围来实现,比如$i++;
也可以像penzi演示的那个一样,要从第几页到第几页,代码方面控制$i的范围就可以.
b,文章路径的获得分需要填正则和无需填正则2种:
1)无需填正则就是获得上面的文章列表页面的所有连接
但是最好对连接进行过滤,处理---判断重复连接,只留一个,处理相对路径,变成绝对路径.比如../ 和./等.
以下是我写的乱七八糟的实现函数:
PHP: [Copy to clipboard]
--------------------------------------------------------------------------------
//2004-11-22 clinch
//$e=clinchgeturl("[url]im286.com/forumdisplay.php?fid=1");[/url]
//var_dump($e);
function clinchgeturl($url)
{
//$url="[url]127.0.0.1/1.htm";[/url]
//$rootpath="[url]fsrootpathfsfsf/yyyyyy/"; [/url]
//var_dump($rrr);
if(eregi('(.)*[\.](.)*',$url)){
$roopath=split("\/",$url);
$rootpath="[url]"[/url].$roopath[2]."/";
$nnn=count($roopath)-1;for($yu=3;$yu$nnn;$yu++){$rootpath.=$roopath[$yu]."/";}
// var_dump($rootpath); //http: ,'',127.0.0.1,xnml,index.php
}
else{$rootpath=$url; //var_dump($rootpath);
}
if(isset($url)){
echo "$url 有下列裢接:
";
$fcontents = file($url);
while(list(,$line)=each($fcontents)){
while(eregi('(href[[:space:]]*=[[:space:]]*"?[[:alnum:]:@/._-]+[\?]?[^\"]*"?)',$line,$regs)){
//$regs[1] = eregi_replace('(href[[:space:]]*=[[:space:]]*\"?)([[:alnum:]:@/._-]+)(\"?)',"\\2",$regs[1]);
$regs[1] = eregi_replace('(href[[:space:]]*=[[:space:]]*[\"]?)([[:alnum:]:@/._-]+[\?]?[^\"]*)(\.*)[^\"\/]*([\"]?)',"\\2",$regs[1]);
if(!eregi('^http:\/\/',$regs[1])){
if(eregi('^\.\.',$regs[1])){
// $roopath=eregi_replace('(http:\/\/)?([[:alnum:]:@/._-]+)[[:alnum:]+](\.*)[[:alnum:]+]',"http:\/\/\\2",$url);
$roopath=split("\/",$rootpath);
$rootpath="[url]".$roopath[2]."/";
//echo "这是根本d :"."\n";
$nnn=count($roopath)-1;for($yu=3;$yu$nnn;$yu++){$rootpath.=$roopath[$yu]."/";}
//var_dump($rootpath);
if(eregi('^\.\.[\/[:alnum:]]',$regs[1])){
//echo "这是../目录/ :"."\n";
//$regs[1]="../xx/xxxxxx.xx";
// $rr=split("\/",$regs[1]);
//for($oooi=1;$oooi $rrr=$regs[1];
// {$rrr.="/".$rr[$oooi];
$rrr = eregi_replace("^[\.][\.][\/]",'',$rrr); /
1,文章列表页面的自动切换,以及文章路径的获得.
2,获得:标题,内容
3,入库
4,问题
1,文章列表页面的自动切换,以及文章路径的获得.
a,列表页面的自动切换一般依赖动态页面来实现.比如
//2004-11-22 clinch
//$e=clinchgeturl("[url]im286.com/forumdisplay.php?fid=1");[/url]
//var_dump($e);
function clinchgeturl($url)
{
//$url="[url]127.0.0.1/1.htm";[/url]
//$rootpath="[url]fsrootpathfsfsf/yyyyyy/"; [/url]
//var_dump($rrr);
if(eregi('(.)*[\.](.)*',$url)){
$roopath=split("\/",$url);
$rootpath="[url]"[/url].$roopath[2]."/";
$nnn=count($roopath)-1;for($yu=3;$yu$nnn;$yu++){$rootpath.=$roopath[$yu]."/";}
// var_dump($rootpath); //http: ,'',127.0.0.1,xnml,index.php
}
else{$rootpath=$url; //var_dump($rootpath);
}
if(isset($url)){
echo "$url 有下列裢接:
";
$fcontents = file($url);
while(list(,$line)=each($fcontents)){
while(eregi('(href[[:space:]]*=[[:space:]]*"?[[:alnum:]:@/._-]+[\?]?[^\"]*"?)',$line,$regs)){
//$regs[1] = eregi_replace('(href[[:space:]]*=[[:space:]]*\"?)([[:alnum:]:@/._-]+)(\"?)',"\\2",$regs[1]);
$regs[1] = eregi_replace('(href[[:space:]]*=[[:space:]]*[\"]?)([[:alnum:]:@/._-]+[\?]?[^\"]*)(\.*)[^\"\/]*([\"]?)',"\\2",$regs[1]);
if(!eregi('^http:\/\/',$regs[1])){
if(eregi('^\.\.',$regs[1])){
// $roopath=eregi_replace('(http:\/\/)?([[:alnum:]:@/._-]+)[[:alnum:]+](\.*)[[:alnum:]+]',"http:\/\/\\2",$url);
$roopath=split("\/",$rootpath);
$rootpath="[url]"">http://www.im286.com/foru[/url] ... d=1&page=$i
可以在后面利用$i的自动增加或范围来实现,比如$i++;
也可以像penzi演示的那个一样,要从第几页到第几页,代码方面控制$i的范围就可以.
b,文章路径的获得分需要填正则和无需填正则2种:
1)无需填正则就是获得上面的文章列表页面的所有连接
但是最好对连接进行过滤,处理---判断重复连接,只留一个,处理相对路径,变成绝对路径.比如../ 和./等.
以下是我写的乱七八糟的实现函数:
PHP: [Copy to clipboard]
--------------------------------------------------------------------------------
//2004-11-22 clinch
//$e=clinchgeturl("[url]im286.com/forumdisplay.php?fid=1");[/url]
//var_dump($e);
function clinchgeturl($url)
{
//$url="[url]127.0.0.1/1.htm";[/url]
//$rootpath="[url]fsrootpathfsfsf/yyyyyy/"; [/url]
//var_dump($rrr);
if(eregi('(.)*[\.](.)*',$url)){
$roopath=split("\/",$url);
$rootpath="[url]"[/url].$roopath[2]."/";
$nnn=count($roopath)-1;for($yu=3;$yu$nnn;$yu++){$rootpath.=$roopath[$yu]."/";}
// var_dump($rootpath); //http: ,'',127.0.0.1,xnml,index.php
}
else{$rootpath=$url; //var_dump($rootpath);
}
if(isset($url)){
echo "$url 有下列裢接:
";
$fcontents = file($url);
while(list(,$line)=each($fcontents)){
while(eregi('(href[[:space:]]*=[[:space:]]*"?[[:alnum:]:@/._-]+[\?]?[^\"]*"?)',$line,$regs)){
//$regs[1] = eregi_replace('(href[[:space:]]*=[[:space:]]*\"?)([[:alnum:]:@/._-]+)(\"?)',"\\2",$regs[1]);
$regs[1] = eregi_replace('(href[[:space:]]*=[[:space:]]*[\"]?)([[:alnum:]:@/._-]+[\?]?[^\"]*)(\.*)[^\"\/]*([\"]?)',"\\2",$regs[1]);
if(!eregi('^http:\/\/',$regs[1])){
if(eregi('^\.\.',$regs[1])){
// $roopath=eregi_replace('(http:\/\/)?([[:alnum:]:@/._-]+)[[:alnum:]+](\.*)[[:alnum:]+]',"http:\/\/\\2",$url);
$roopath=split("\/",$rootpath);
$rootpath="[url]".$roopath[2]."/";
//echo "这是根本d :"."\n";
$nnn=count($roopath)-1;for($yu=3;$yu$nnn;$yu++){$rootpath.=$roopath[$yu]."/";}
//var_dump($rootpath);
if(eregi('^\.\.[\/[:alnum:]]',$regs[1])){
//echo "这是../目录/ :"."\n";
//$regs[1]="../xx/xxxxxx.xx";
// $rr=split("\/",$regs[1]);
//for($oooi=1;$oooi
// {$rrr.="/".$rr[$oooi];
$rrr = eregi_replace("^[\.][\.][\/]",'',$rrr); /
推荐阅读
-
MySQL实现Oracle或者PostgreSQL的row_numberover这样的排名语法_MySQL
-
用php过滤文字中的表情字符
-
介绍一些集成APACHE+MYSQL+PHP的软件
-
php输出xml必须header的解决方法
-
[PHP]防止表单重复提交的几种方法
-
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
-
提高MySQL数据库查询效率的几个技巧[php程序员必看]
-
PHP 写文本日志实现代码
-
基于curl数据采集之单页面并行采集函数get_htmls的使用_PHP
-
Flash Paper 仿百度文库的功能实现