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'] );

做采集功能,原来这么简单