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

2017-10-07 11:25:43 +08:00
 Jaeger

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

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

安装

使用 Composer 安装:

composer require jaeger/querylist

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

composer require jaeger/querylist-rule-baidu

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

插件 API

class Baidu:

使用

<?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

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

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

QL 和 QL3 有区别吗?
GGGG430
2017-10-08 17:11:25 +08:00
Jaeger
2017-10-08 22:22:48 +08:00
@koodai #3 QL3 是上一个大版本,目前是 QL4
Jaeger
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
2017-10-09 00:35:46 +08:00
@Jaeger 多谢回答, 插件不错
YMB
2017-10-09 09:30:12 +08:00
mark
moke
2017-10-09 09:36:19 +08:00
百度都不支持盘内搜索,
2ME
2017-10-09 11:38:15 +08:00
@Jaeger 大佬 3.0Multi 并发采集后 如果想在 success 的 function 里接着当前线程下载图片怎么操作.. 直接调用下载的话下载图片的时候会有阻塞 现在处理都是把图片链接存到最后再开一个 Multi 去专门下载之前的图片 = =
kwan
2017-10-30 03:55:11 +08:00
@koodai 你也说了,单一脚本的情况之下,如果实际情况是 A 依赖于 B,而 B 又依赖于 C,composer 关键是帮你解决了依赖,就好像 Linux 的包管理器 rpm、apt 那样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/395748

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX