php登录抓取网页指定内容(php进行网页抓取的时候你有没有感觉到用起来比较麻烦呢?)
优采云 发布时间: 2022-04-02 16:30php登录抓取网页指定内容(php进行网页抓取的时候你有没有感觉到用起来比较麻烦呢?)
使用 php 进行网页抓取时,您是否觉得使用起来很麻烦?目前我还没有发现php有这样的网页爬虫类。每次我用这个,我总是觉得不舒服。每当想起jquery中的find()方法,获取网页上的元素真是太方便了。网上找了php相关的方法,但是好像没有结果,于是和同事研究了一个类,专门针对php爬取网页的处理类,使用这个类不需要和以前一样麻烦,可以直接调用类似jquery的方法,直接爬取网页上的数据,比如$vp=$this->vq->find(\'a),只需要这样做并且可以获取页面中所有的a标签,你不觉得有点意思吗?
废话不多说,先介绍一下这个类的一般用法吧!
为了方便大家,封装了Vquery类。可以在项目中直接引入Vquery类,然后构造一个函数传入参数:
函数 _initialize(){
import(\'ORG.Util.Vquery\');//参考Vquery类,不同的框架或源码编写方式可能会引入差异。根据实际情况选择相应的引入方式。
$arr=数组(
"网址"=>"",
“方法”=>“获取”或“发布”,
"data"=>array("username"=>"admin","password"=>"admin",.......参数根据需要填写),
"header"=>array("DESC:admin",...同上),
);
// $arr=file_get_contents("");
$this->vq=new Vquery($arr);
}
说明:Vquery类内置curl函数,支持参数格式①Array,即依靠Vquery中的curl爬取网页进行分析取值。这种情况下,需要在上面的$arr数组中配置格式;②Vquery还支持内容传输参数。比如可以直接传入已经获取到的网页内容,比如使用file_get_contents获取网页,直接传入。Vquery内部已经做了Url解析,支持各种Url参数。好了,介绍工作到此结束,大家可以试一试。
Vquery类使用了6个方法:find()、attr()、html()、text()、getHtmlContent()、deal();
find():find()方法支持类似jquery的链式使用规则,如$vq=$this->vq->find("div")->find("a");
find() 参数传递规则:find(tag),例如$vq=$this->vq->find(“div”) 表示查找文章中tag的所有元素;
find(tag $attribute=) 例如 $vq=$this->vq->find(div$class=\”nvai\”) 表示在 文章 中查找所有 class=nvai 的 div
find(tag, tag) 例如 $vq=$this->vq->find("div","span") 意思是找出 文章 中的许多 div 和 span 标签
find (tag: number) 例如 $vq=$this->vq->find("a:2") 表示在 文章 中查找第二个 a 标签
find(属性):例如$vq=$this->vq->find("class=\"nvai\"") 表示查找文章中所有class="nvai"的标签。
find() 方法支持链接,因此它可以组合用于不同的目的。系统检查完链式调用的结构后,find()方法会自动使下面的链式结构与上级返回的结果相匹配,例如$vq=$this->vq->find(“div$class =\"nvai\"")->find("a"); 这个使用返回的结果是:找到class=nvai的div中的所有a标签
attr() :attr() 方法适用于匹配属性参数。比如我想查找文本中所有的herfs,那么我们可以这样使用:attr("herf"); 返回结果会得到herf后面的地址参数,其他属性值获取方法同理,加上链使用规则,可以这样使用函数:$vq=$this->vq->find("a" )->attr("herf");
html():html() 方法适用于获取网页上指定标签之间的文本内容。该方法获取的是最原创的内容,没有经过任何处理,因此可能收录其他标签或字符。可以根据您的需要使用此方法。适用于自己的需要,适用的方法和jquery中的一样,这个方法不需要传参数:$vq=$this->vq->find("a")->html();
text():text()方法的适用范围和html()方法一样,唯一的区别是test()方法被过滤了,也就是通过test() 方法不在其中。将收录任何标签。这对于抓取网页文本非常有效。使用方法和html()一样,不需要传参数:$vq=$this->vq->find("a")->test();
getHtmlContent():getHtmlContent()方法适用于查看被爬取的目标网页的源代码。为了让开发者查看网页的特性,这种方式可以分为传参和不传参。传递参数时,返回目标网站的源代码。开发者可以保存返回值等处理。:getHtmlContent(true); 不传参数时,系统默认格式化并打印网页源代码:使用格式 $vq=$this->vq->getHtmlContent();
deal():deal()方法对前面方法的结果进行排序,将返回的多维数组排序为二维数组,方便数据访问。不用传参数,一般用法如下:$vq=$this->vq->find("a")->deal();
方法介绍大致如上。经过我们一段时间的测试,Vquery类可以覆盖主流网络爬取的需求。当然,肯定有需要改进的地方,所以发这个文件,希望更多php大神能用,告诉我们不足之处。相信以大家的智慧,以后用php爬取网页会更方便。提高开发效率。