php 采集类-phpsnoopy官网,PHPClientSnoopy.class

2023-10-06 0 7,267 百度已收录

这几天一直在研究史努比的采集程序,完成百度文档的采集和下载附件。

其中,需要对HTML进行DOM模型操作,读取表单中数组的Value,所以我在网上查找了一些类,发现了两个类:HTMLSQL和DOMDocument。 功能比较齐全,可惜没有我想要的。 功效,所以我决定自己开发。

我想补充一些我自己的看法。 我是在离开上海后的最后三天写这篇文章的。 恐怕要到明年才能看到成品了。 希望这次回去不要太贪玩了。 嘎嘎。

首先,需要实现类似Javascript的操作,例如document.getElementById和document.getElementByNamephp 采集类,它们分别返回一个HTML元素对象和一个链表。 唯一的 HTML 元素可以使用该对象来输出 HTML 参数和值。

下面给出了代码片段。

[php]

/*获取指定ID的HTML元素*/

函数getElementById($Value)

$this->__getElement($URI,'id',$Value);

if(is_array($this->结果)&&count($this->结果)>0)

$this->结果=array_shift($this->结果);

$this->结果=$this->__ElementToObj($this->结果);

/*获取指定名称的HTML元素*/

函数 getElementByName($Value)

return$this->__getElement('name',$Value);

/*获取指定标签的HTML元素*/

函数getElementByTag($TAG='')

$结果=$这个->结果;

if($TAG)$TAG="($TAG)";

否则$TAG='[az]+';

preg_match_all("@]*?>@isU",$结果,$Elements);

$this->元素=$Elements[0];

returncount($Elements[0]);

/*获取富含单个属性或值的 HTML 元素*/

function__getElement($ELE,$value=NULL)

if(!$this->getElementByTag()){

返回假;

}else$Elements=$this->元素;

$ELE=爆炸('|',$ELE);

foreach($ELEas$E)

$this->__matchElement($Elements,$E,$value);

排序($元素);

返回$元素;

function__matchElement(&$Elements,$E,$value=NULL)

if($value!==NULL)$value="["'s]*?{$value}["'s]*?"";

否则$值='';

if(is_array($Elements))

foreach($Elementsas$key=>$html)

if(!preg_match("@s{$E}={$value}@is",$html))unset($Elements[$key]);

}别的{

if(!preg_match("@s{$E}={$value}@is",$Elements))unset($Elements);

返回$元素;

函数__ElementToObj($Elements)

if(is_array($Elements))

foreach($Elementsas$key=>$E)

$Elements[$key]=$this->__ElementToObj($E);

}别的{

preg_match_all("@s([az]+)=["']*?([^"']*?)["']*?@isU",$Elements,$Obj);

$Elements=newstdClass();

foreach($Obj[1]as$key=>$value)

$Elements->$Obj[1][$key]=$Obj[2][$key];

返回$元素;

[/php]

使用方法也比较简单。

[php]

$this=getElementById('thisid');

$this->title;//输出标题

$this->value;//输出值

[/php]

基础工作已经完成php 采集类,接下来会进行一些扩展,我们计划添加以下功能。

连贯操作

类似于Jquery的节点选择器功能。

我们先来说一下什么是相干函数。 PHP类的连贯操作在一个方法之后直接调用同级别的另一个方法。 我们习惯称其为一致套接字。 在ThinkPHP2.0中,这种方法非常常用,逻辑清晰,效率也比较高。 最重要的是,我觉得这个功能非常酷......

至于连续性套接字,则没有那么难理解。 简单地说,它将结果返回给类本身,并且该类可以执行其他允许的方法。 想要入门的人可以阅读这篇文章:

说到这里,可以做一个演示。 在 html 页面中,有一个包含多个字段和不同值的表单。 我们来演示一下获取这个值的操作过程。

[php]html->表单->输入->名称->值[/php]

根据DOM模型的路径,我们可以定位到我们需要的元素和参数值。 这里的选择过程和Query的选择器很相似,这里只是简单模拟了一个过程。

[php]

$obj=form(array('name'=>'testname','class'=>'testclass'))

//如果有多个Form,可以使用链表来缩小选择范围。

->input('name'=>'username')//获取域名

->select();//转换为链表或对象

[/php]

实现了基于Dom模型的选择过程。 当根据 HTML 元素类型进行选择时,直接根据元素名称进行选择。 考虑到您可能无法在类中编写很多 HTML 元素,因此可以使用 __call 方法将该方法转移到另一个操作中。

喜欢:

[php]$this->form(array('name'=>'testname','class'=>'testclass'))[/php]

被重定向到其他操作并将数据返回到$this->results,从而更容易以其他方式或以连贯的方式调用。

[php]$this->getElement('form',array('name'=>'testname','class'=>'testclass'))[/php]

这样,即使根据DOM模型进行节点选择的功能规划完成了,返回后的工作就是建立流程、选择并逻辑处理HTML元素,敬请期待。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php 采集类-phpsnoopy官网,PHPClientSnoopy.class https://www.wkzy.net/game/198694.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务