本站停止维护,已转移至laravel学习网;欢迎大家移步访问!

laravel [ 拓展包: Htmldom ] laravel html代码解析神器

在我们开发和编写爬虫的过程中,常常需要在网页中提取关键字,提取我们需要的内容,python中大家都是用beautifulsoup,简直是神器,有了它我们可以快速的提取到网页中我们需要的内容,免去我们慢慢的编写正则表达式,其实,在PHP中,也有simple_html_dom能帮助我们快速提取网页内容,在laravel中也有这样的拓展包Htmldom,下面我们来看一下怎么使用吧:

一. 安装使用

composer安装Htmldom是在composer.json中加入

{
    "require": {
        "yangqi/htmldom": "dev-master"
    }
}

然后使用

 composer update
二. 配置

1.在config/app.php的providers下加入

'providers' => array(
    ...
    'Yangqi\Htmldom\HtmldomServiceProvider',
    ...

2.在config/app.php的aliases下加入

'aliases' => array( 
    ...
    'Htmldom' => 'Yangqi\Htmldom\Htmldom',
    ...

三. 使用

接下来我门使用一下,其他深入的用法可以参考simplehtmldom用法详解。因为这个拓展没有使用文档,直接看simple_html_dom就可以了

use Htmldom;

$html = new Htmldom('http://www.baidu.com');
// 提取全部的图片src
foreach($html->find('img') as $element) 
       echo $element->src . '<br>';

// 提取全部的连接
foreach($html->find('a') as $element) 
       echo $element->href . '<br>';

四. 拓展

好的,上面我们已经讲了很多的用法,下面我们来进行拓展一下,让这个拓展更加适合我们使用,一如我们网站宣传的,复杂的业务逻辑写在Servces中,下面我根据我的业务逻辑总结了一个使用,这里我做了很多删减,因为我是拿来做爬虫的,所以真的是太多了,这里一种是直接给url,获取指定内容的,一种是给代码,获取指定内容的,不然朋友们看文档完全蒙蔽,因为没有文档

<?php
namespace App\Services;
use Htmldom;

class HtmldomService
{
	/**
     * 主要运用PHP Simple HTML DOM Parser Manual
     * 此处只封装了常用方法
     * 更多方法请参照http://simplehtmldom.sourceforge.net/manual.htm
     * 使用方法(获取官网的token):HtmldomService::SimpleGivenHtml('','input','name','_token','value','all');
    */

	/**
	* 获取页面全部内容,
	* sort = 详情:比如plaintext(纯文本)等
	*/
	public static function SimpleAllHtml($url,$sort)
	{
		$html = new Htmldom($url);
		$result=$html->$sort; 
       	        return $result;
	}

	/**
	* 获取页面全部标签,
	* url=网站连接,
	* dom = 标签:比如a.img等,
	* sort = 详情:比如src,href,plaintext,class等
	*/
	public static function SimpleSingleHtml($url,$dom,$sort)
	{
		$html = new Htmldom($url);
		$result=[];
		foreach($html->find($dom) as $element) 
       		    $result[]=$element->$sort;
           	return $result;
	}

	/**
	* 获取页面全部内容,
	* sort = 详情:比如plaintext等
	*/
	public static function strSimpleAllHtml($str,$sort)
	{
		$htmldom = new Htmldom();
		$html = $htmldom->load($str);
		$result=$html->$sort; 
       	        return $result;
	}

	/**
	* 获取页面全部标签,
	* str = 传递过来的为html代码
	* dom = 标签:比如a.img等,
	* sort = 详情:比如src,href,plaintext,class等
	*/
	public static function strSimpleSingleHtml($str,$dom,$sort)
	{
		$htmldom = new Htmldom();
		$html = $htmldom->load($str);
		$result=[];
		foreach($html->find($dom) as $element) 
       		    $result[]=$element->$sort;
       	        return $result;
	}

}

好的,写太多大家看起来比较麻烦,到这里就结束了,如果有后续的疑问,可以在下面留言,我会不断的给大家回复,没准从留言中,我会把开发者没写的文档写全,

转载请注明 :一沙网络原文出处:http://bbs.earnp.com/article/262
问题交流群 :562864481
2
打赏
发布时间 :2016-12-04 16:15:32
分享

1 个评论

  • 无名氏
    回复
    2016-12-06 15:57

    ###hhaa

要回复文章请先登录注册