V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Jaeger
V2EX  ›  PHP

PHP 使用 QueryList 轻松实现一个百度网盘资源搜索引擎

  •  
  •   Jaeger · 2017-10-07 11:25:43 +08:00 · 3756 次点击
    这是一个创建于 2386 天前的主题,其中的信息可能已经有所发展或是发生改变。

    QueryList 使用 jQuery 的方式来做采集,拥有丰富的插件。

    下面来演示QueryList使用Baidu 搜索引擎插件轻松实现站内搜索。

    安装

    使用 Composer 安装:

    • 安装 QueryList
    composer require jaeger/querylist
    

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

    • 安装 Baidu 搜索引擎插件
    composer require jaeger/querylist-rule-baidu
    

    GitHub: https://github.com/jae-jae/QueryList-PhantomJS

    插件 API

    • Baidu baidu($pageNumber = 10):获取百度搜索引擎

    class Baidu:

    • Baidu search($keyword):设置搜索关键词
    • Baidu **setHttpOpt(array $httpOpt = [])**:设置 HTTP 选项,查看: GuzzleHttp options
    • int getCount():获取搜索结果总条数
    • int getCountPage():获取搜索结果总页数
    • Collection page($page = 1,$realURL = false):获取搜索结果

    使用

    • 实现一个百度网盘资源搜索引擎:
    <?php
    
    require 'vendor/autoload.php';
    
    use QL\QueryList;
    use QL\Ext\Baidu;
    
    $ql = QueryList::use(Baidu::class);
    
    // 搜索百度网盘网站,包含‘百度’关键词的资源
    $searcher = $ql->baidu()->search('site:pan.baidu.com 百度');
    
    // 获取第一页数据,并获取真实 URL 连接地址
    $data = $searcher->page(1,true);
    
    print_r($data->all());
    
    

    抓取结果:

    Array
    (
        [0] => Array
            (
                [title] => 百度网盘_享你所想
                [link] => http://pan.baidu.com/
            )
        [1] => Array
            (
                [title] => 百度网盘 客户端下载
                [link] => https://pan.baidu.com/download
            )
        [2] => Array
            (
                [title] => 百度网盘-开放平台
                [link] => https://pan.baidu.com/platform/read
            )
         // ....
    )
    
    • 更多用法
    $baidu = $ql->baidu(15); // 设置每页搜索 15 条结果
    $searcher = $baidu->search('QueryList');
    $count = $searcher->getCount();  // 获取搜索结果总条数
    $data = $searcher->page(1);
    $data = $searcher->page(2);
    
    $searcher = $baidu->search('php');
    $countPage = $searcher->getCountPage(); // 获取搜索结果总页数
    for ($page = 1; $page <= $countPage; $page++)
    {
        $data = $searcher->page($page);
    }
    
    $data = $searcher->setHttpOpt([
        // 设置 http 代理
        'proxy' => 'http://222.141.11.17:8118',
       // Set the timeout time in seconds
        'timeout' => 30,
    ])->page(1);
    

    Google 搜索引擎插件

    当然除了 Baidu 搜索引擎插件,QueryList 也有 Google 搜索引擎插件,也可以实现同样的功能。

    文档: https://doc.querylist.cc/site/index/doc/43 GitHub: https://github.com/jae-jae/QueryList-Rule-Google

    11 条回复    2017-10-30 03:55:11 +08:00
    chnyang
        1
    chnyang  
       2017-10-07 11:33:52 +08:00 via Android
    支持支持。
    vacker
        2
    vacker  
       2017-10-07 11:36:35 +08:00 via Android
    很好的插件,支持下!
    koodai
        3
    koodai  
       2017-10-07 21:55:13 +08:00
    确实挺好的,不过我一直比较抵触使用 composer,平时维护一个单脚本足够方便,引入包管理器反而把问题复杂化了。

    “ 如果你的 PHP 版本还停留在 PHP5,或者不会使用 Composer,你可以选择使用 QueryList3 ”

    QL 和 QL3 有区别吗?
    GGGG430
        4
    GGGG430  
       2017-10-08 17:11:25 +08:00
    Jaeger
        5
    Jaeger  
    OP
       2017-10-08 22:22:48 +08:00
    @koodai #3 QL3 是上一个大版本,目前是 QL4
    Jaeger
        6
    Jaeger  
    OP
       2017-10-08 22:41:10 +08:00
    @GGGG430 #4
    可以理解为 QueryList 是 Gotte 的超集!
    QueryList 除了拥有与 Gotte 类似的 DOM 操作能力和内置强大 GuzzleHttp,还有:
    1.拥有比 Goutte 更全的选择器,如:伪选择器`:eq(0)`
    2.拥有通用的列表采集方案
    3.拥有乱码解决能力
    4.拥有内容过滤功能
    5.可扩展,拥有丰富的插件
    6.API 简洁易用

    目前已有的插件如:多线程采集插件、抓取动态 JavaScript 渲染页面的 PhantomJS 插件等
    GGGG430
        7
    GGGG430  
       2017-10-09 00:35:46 +08:00
    @Jaeger 多谢回答, 插件不错
    YMB
        8
    YMB  
       2017-10-09 09:30:12 +08:00
    mark
    moke
        9
    moke  
       2017-10-09 09:36:19 +08:00
    百度都不支持盘内搜索,
    2ME
        10
    2ME  
       2017-10-09 11:38:15 +08:00
    @Jaeger 大佬 3.0Multi 并发采集后 如果想在 success 的 function 里接着当前线程下载图片怎么操作.. 直接调用下载的话下载图片的时候会有阻塞 现在处理都是把图片链接存到最后再开一个 Multi 去专门下载之前的图片 = =
    kwan
        11
    kwan  
       2017-10-30 03:55:11 +08:00
    @koodai 你也说了,单一脚本的情况之下,如果实际情况是 A 依赖于 B,而 B 又依赖于 C,composer 关键是帮你解决了依赖,就好像 Linux 的包管理器 rpm、apt 那样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4970 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 09:40 · PVG 17:40 · LAX 02:40 · JFK 05:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.