php网页采集功能

我要获取这里的所有列表名称和列表url地址。
phpquery有多种初始化的方法,这里我用:

下载:http://code.google.com/p/phpquery/downloads/list 
<?php

//初始化phpquery对象
$file = file_get_contents("
http://lmzj26.blog.51cto.com/index.html");
$dom = phpQuery::newDocument($file);

//这样可以得到网页标题
$title = pq("head > title")->text(); 
//获取网页标题
$title = $dom['head > title']->text();

//开始获取列表
//可以看到样式为.con这个div 
$div = pq('.con')->find('a');           //把这个div里面的所有a标签作为对象存入$div    

foreach($div as $d){       //循环,这里的$d即表示的是一个a对象了
$url = pq($d)->attr('href');   //获取href属性
$t = pq($d)->text();             //获取a标签里面的文本
$al[$url] = $t;           //存入数组,循环,采集,存入数据库
}

例二。
guoxue.baidu.com/page/caabbead/0.html
/**
这里我们要做的是获取这里的文章作者和内容,即关关雎鸠.....
分析得出作者是在 <div class="con">  里面的p标签里面的。而内容则是被包含
在这个div里面的第二个子div,第一与第三个div是上下页。
*/

//创建对象
$file2 = file_get_contents("
http://lmzj26.blog.51cto.com/index.html ");
$dom = phpQuery::newDocument($file2);

//获取了作者那一块信息。
$writer = pq('.con')->find('p')->text();
//echo $writer;
//$writer = getWriter($writer);   //这是我写的获取作者的一个函数,很简单按:分割就得到了

$cont = pq('.con')->find('div');  //得到样式.con的div里面所有div对象
$content = array();
$content['writer'] = $writer;

$i =0;
foreach($cont as $arch){         //循环得到单个的div对象
if($i ==1){                         //文章div是第二个
$content['txt'] = pq($arch)->html();   //这里就得到文章了

}    
$i++;
}
//print_r($content);

?>


这样就完成了。不过采集需要注意的是编码问题。如不注意则有些生僻字则获取不到。
如上网页的编码是gb2312,而我的是utf-8则需要转码一下。

$content['txt']  = iconv('gb2312','utf-8',$content['txt'] );   //但是这样还是有很多字符丢失了。。搞了半天才明白。。这有关字符大小的关系。gb2312<gbk<gb18030
把gb2312改为gbk就好了。。

$content['txt']  = iconv('gbk','utf-8',$content['txt'] );
 
做采集功能,原来这么简单
posted on 2012-04-28 15:22  weaver_chen  阅读(272)  评论(0编辑  收藏  举报