Laravel 使用 QueryList 轻松采集网页

说明

我们有时需要抓取一个网页的内容,但只需要特定部分的信息,通常会用正则来解决,这当然没有问题。正则是一个通用解决方案,但特定情况下,往往有更简单快 捷的方法。

QueryList是一个基于phpQuery的PHP通用列表采集类,得益于phpQuery,让使用QueryList几乎没有任何学习成本,只要会CSS3选择器就可以轻松使用QueryList了,它让PHP做采集像jQuery选择元素一样简单。

安装

QueryList运行需要PHP5.3+,使用 Composer 安装:

composer require jaeger/querylist

用例

先上例子,再来解释。以采集PHPHub教程区文章列表为例:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class IndexController extends Controller
{
    public function list()
    {
        //待采集的目标页面,PHPHub教程区
        $page = 'https://laravel-china.org/categories/6';
        //采集规则
        $rules = array(
            //文章标题
            'title' => ['.media-heading a','text'],
            //文章链接
            'link' => ['.media-heading a','href'],
            //文章作者名
            'author' => ['.img-thumbnail','alt']
        );
        //列表选择器
        $rang = '.topic-list>li';
        //采集
        $data = \QL\QueryList::Query($page,$rules,$rang)->data;
        //查看采集结果
        print_r($data);
    }
}

采集结果:

Array
(
    [0] => Array
        (
            [title] => 好友动态的实现原理
            [link] => https://learnku.com/laravel/t/2750
            [author] => luo975974740
        )

    [1] => Array
        (
            [title] => 打造完美的 Ubuntu16.04 开发环境【持续更新】
            [link] => https://learnku.com/laravel/t/2723
            [author] => liuwantao
        )

    //省略........

     [19] => Array
        (
            [title] => [Laravel 5.3 新功能] 10. 全文搜索方案 Laravel Scout 介绍
            [link] => https://learnku.com/laravel/t/2673
            [author] => monkey
        )
)

接口说明

使用QueyList只需要编写规则库,然后把规则库传给QueryList的静态方法QueryQueryList就会自动按照规则库把内容全部采集回来了,而规则库是用jQuery选择器来编写的,所以使用QueryList的整个过程非常简单!

//接口解释
QueryList::Query(采集的目标页面,采集规则[,区域选择器][,输出编码][,输入编码][,是否移除头部])
//采集规则
$rules = array(
   '规则名' => array('jQuery选择器','要采集的属性'[,"标签过滤列表"][,"回调函数"]),
   '规则名2' => array('jQuery选择器','要采集的属性'[,"标签过滤列表"][,"回调函数"]),
    ..........
    [,"callback"=>"全局回调函数"]
);
//注:方括号括起来的参数可选

QueryList扩展

  • Request 网络操作扩展

    可以实现如携带cookie、伪造来路等任意复杂的网络请求。

  • Login 模拟登陆扩展

    可以实现模拟登陆然后采集。

  • Multi 多线程插件

    多线程(多进程)采集扩展。

  • DImage 图片下载扩展

    DImage扩展,可实现简单的图片下载需求。

扩展通过QueryList::run 方法运行,同时你可以花几分钟就能创建一个自己的QueryList扩展,这里就不深入讲解了。


QueryList GIT@OSC地址:http://git.oschina.net/jae/QueryList

QueryList GitHub地址:https://github.com/jae-jae/QueryList

QueryList官网:http://querylist.cc/

QueryList指导文档:http://doc.querylist.cc/

本帖已被设为精华帖!
本帖由系统于 1年前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 10
monkey

有点意思 :thumbsup::thumbsup:

2年前

还是网页的东西用网页处理方便,用电脑写比较复杂,得用正则什么.

2年前

这个我一直在用,还是比较方便的,不过还是有问题的,
最主要文档写的很是不清楚,很多重要的地方,文档都是简单的一个实例而过,甚至什么都没有。。。还得自己慢慢看源码来搞。。。。

2年前

采集还是喜欢用 scrapy

2年前

厉害了,保存一下

2年前

问个问题 然后网页的内容是ajax动态加载进去的,是不是就不行了,

1年前

不会用啊!!!

9个月前
Flex

这个我用了蛮久了 有两个bug 一个是post 携带cookie有点毛病 会出现明明发送了正确的但服务器还是认为未登录 另一个是内存泄漏很严重

5个月前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会