laravel Htmldom拓展包,laravel爬虫中的html代码解析神器

Song3720 次浏览0个评论2017年12月26日

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

一、laravel安装htmldom

composer require yangqi/htmldom

2、等待下载安装完成,需要在config/app.php中注册服务提供者同时注册下相应门面:

providers => [
    //........
    Yangqi\Htmldom\HtmldomServiceProvider,
],

aliases => [
     //..........
    Htmldom => Yangqi\Htmldom\Htmldom,
],

三、laravel中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;
    }

}

常见问题

1、输出连接&times被替换成xurl中包含&times字段时就会被html直接解析成x,你直接使用即可,不用echo输出

提交评论

请登录后评论

用户评论

    当前暂无评价,快来发表您的观点吧...

更多相关好文