PHP采集程的思路

最近在采集一下体彩的网络数据,看到了网上的PHP采集程的思路,

思路:
  采集程序的思路很简单大体可以分为以下几个步骤:
    1.获取远程文件源代码(file_get_contents或用fopen).
    2.分析代码得到自己想要的内容(这里用正规匹配,一般是得到分页)。
  3.跟根得到的内容进行下载入库等操作。
在这里第二步有可能要重复的操作好几次,比如说要先分析一下分页地址,在分析一下内页的内容才能取得我们想要的东西。[break]
代码:
记的以前发部过部分的代码今天我在这里在简单的发部一下 复制PHP内容到剪贴板 PHP代码:@$nl=file_get_contents($rs['url']);//抓取远程内容
preg_match_all("/var url = \"gameswf\/(.*?)\.swf\";/is",$nl,$connect);//进行正规匹配取得自己要的内容
mysql_query("insert ......插入数据库部分");
上面的代码就是所有采集要用到的代码了,当然大家也可以用fope来作,我个人喜欢用file_get_contents。

下面在共享一下我的下载图片flash到本地的办法,太简单了两行代码 复制PHP内容到剪贴板 PHP代码:if(@copy($url,$newurl)){
echo 'ok';
}

在论坛上以前还发过一个图片下载函数这会也放上来给大家 复制PHP内容到剪贴板 PHP代码:/*本存图片函数*/
function getimg($url,$filename){
        /*判断图片的url是否为空,如果为空停止函数*/
        if($url==""){
                return false;
        }
        /*取得图片的扩展名,存入变量$ext中*/
        $ext=strrchr($url,".");
        /*判断是否是合法的图片文件*/
    if($ext!=".gif" && $ext!=".jpg"){
                return false;
        }
        /*读取图片*/
        $img=file_get_contents($url);
        /*打开指定的文件*/
        $fp=@fopen($filename.$ext,"a");
        /*写入图片到指点的文件*/
        fwrite($fp,$img);
        /*关闭文件*/
        fclose($fp);
        /*返回图片的新文件名*/
        return $filename.$ext;
}

 

共享一下个人的采集心德:
1.不采那些作防盗链了的站,其实可以作假来路但是这样的站采集成本太高
2.采集尽量快的站,最好在本地进行采集
3.采集时有很多时候可以先把一部分数据存入数据库,等以后进行下一步的处理。
4.采集的时候一定要作好出错处理,我一般都是如果采集三次没有成功就跳过。以前经常就因为一条内容不能采就卡在那里一直的采。
5.入库前一定要作好判断,检查内容的合法,过滤不必要的字符串。
 


smarteng 发布于 2009-11-18 09:12

php 处理DOM利器–phpQuery

JQuery是一个非常著名的JS框架,提供了对DOM文档的完整操作。这个文档处理利器现在终于有了PHP版,也就是说可以使用php操作HTML或者XML文档,遍历文档的节点,很轻松的取出,填充节点内容。或者简单来说,除了js的事件响应部分,其余的几乎都可以用php来实现。php对数据处理的能力显然要比JS强大很多,对不熟悉JS的同学来说,phpQuery是个非常强大的帮手。如果了解了phpQuery,那么就很容易理解其实phpQuery也可以取代一部分Smarty的功能。

我刚刚开始学习使用phpQuery,这应该算一篇学习笔记,我会努力将其向手册风格靠拢,不过不会做成中文手册,仍然会加入我在使用过程中遇到的问题以及解决方案。[break]

开始phpQuery
参考资料:phpQuery JQuery

phpQuery从编程思想到语言风格都是参照JQuery来做的,所以熟悉JQuery的人可以随时对照参考JQuery手册,方便理解。

phpQuery应用举例:

require(’phpQuery/phpQuery.php’);
$file = file_get_contents(”test_phpQuery.html”);
$dom = phpQuery::newDocument($file);  //初始化对象

echo pq(”head > title”)->text(); //输出文档title

如果是取得某个class的内容呢?


PHP代码
<?php  
  
//...include   
//...new phpQueryDocument  
  
$html->find('div.test eq(1)')->html();  
//表示取得div的class为test的,第一个匹配的元素中html内容  
pq这个全局函数类似于JQuery中的$()符号,用于执行请求,或者遍历DOM节点。
例子中的”head > title”就是一个选择请求,选择head标签下的title子标签。

pq(”li”); //选择所有文档中的li标签
foreach(pq(”li”) as $item)
pq($item);

遍历所有的”li”标签并取得内容。

在分析XML文档上,技术是我见过的最方便的…….
<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes” ?>
<channel>
<title>test title</title>
<geo>101.55</geo>
</channel>

pq(”channel > geo”); //输出101.55


呵呵,快去:http://code.google.com/p/phpquery/下载吧





 


smarteng 发布于 2009-11-06 13:36