QueryList — это простой и элегантный инструмент сбора данных PHP, основанный на phpQuery, с высокой масштабируемостью.
1. Используйте тот же селектор DOM CSS3, что и jQuery.
2. Имеет точно такой же API-интерфейс работы с DOM, что и jQuery.
3. Иметь универсальное решение для сбора списков
4. Благодаря мощному набору HTTP-запросов он может легко реализовывать сложные сетевые запросы, такие как имитация входа в систему, поддельный браузер, HTTP-прокси и т. д.
5. Иметь искаженное решение кода
6. Он имеет мощную функцию фильтрации контента и может использовать селектор jQuey для фильтрации контента.
7. Он имеет высокую степень модульной конструкции и высокую масштабируемость.
8. Имейте выразительный API
9. Иметь качественную документацию
10. Имеет богатые плагины
11. Создайте профессиональное сообщество вопросов и ответов и коммуникационную группу.
Плагины упрощают реализацию таких вещей, как
1. Многопоточная коллекция
2. Сбор динамически отображаемых страниц JavaScript (PhantomJS/headless WebKit).
3. Локализация изображения
4. Имитируйте поведение браузера, например отправку формы.
5. Веб-сканер
6.......
PHP >= 7.0
Если ваш PHP все еще привязан к PHP5 или вы не знаете, как использовать Composer, вы можете использовать QueryList3. QueryList3 поддерживает php5.3 и ручную установку.
Установить через Composer:
композитору требуется jaeger/querylist
Операции с элементами
Соберите все адреса изображений на «Nitu.com».
QueryList::get('http://www.nipic.com')->find('img')->attrs('src');
Соберите результаты поиска Baidu
$ql = QueryList::get('http://www.baidu.com/s?wd=QueryList');$ql->find('title')->text(); // Получаем заголовок веб-сайта $ql = QueryList::get('http://www.baidu.com/s?wd=QueryList'); ql ->find('meta[name=keywords]')->content; // Получаем ключевое слово заголовка сайта $ql->find('h3>a')->texts(); // Получаем заголовок результата поиска; list $ql->find('h3>a')->attrs('href'); //Получаем список ссылок с результатами поиска $ql->find('img')->src; //Получаем первое изображение; Адрес ссылки $ql->find('img:eq(1)')->src //Получаем адрес ссылки второй картинки $ql->find('img')->eq(2)->src; ; //Получаем адрес ссылки третьего изображения // Обходим все изображения $ql->find('img')->map(function($img){echo $img->alt; //Распечатываем атрибут alt картинка });
Больше использования
$ql->find('#head')->append('
Коллекция списков
Соберите заголовки и ссылки из списка результатов поиска Baidu:
$data = QueryList::get('http://www.baidu.com/s?wd=QueryList')// Установить правила сбора->rules([ 'title'=>array('h3','text' ), 'link'=>array('h3>a','href')])->query()->getData();print_r($data->all());
Результаты сбора:
Array( [0] => Array ( [title] => QueryList | Чрезвычайно мощный инструмент сбора данных PHP на основе phpQuery [ссылка] => http://www.baidu.com/link?url=GU_YbDT2IHk4ns1tjG2I8_vjmH0SCJEAPuuZN ) [1] = > Array ( [title] => PHP использует QueryList для сканирования содержимого веб-страницы - wb145230 - Blog Park [link] => http://www.baidu.com/link?url=zn0DXBnrvIF2ibRVW34KcRVFG1_bCdZvqvwIhUqiXaS ) [2] => Array ( [ title ] => Введение — руководство по QueryList [ссылка] => http://www.baidu.com/link?url=pSypvMovqS4v2sWeQo5fDBJ4EoYhXYi0Lxx ) //...)
перекодирование
// Выходная кодировка: UTF-8, входная кодировка: GB2312QueryList::get('https://top.etao.com')->encoding('UTF-8','GB2312')->find('a' )->texts();//Кодировка вывода: UTF-8, кодировка ввода: автоматическое распознавание QueryList::get('https://top.etao.com')->encoding('UTF-8')-> найти('а')->тексты();
Сетевые операции HTTP (GuzzleHttp)
Войдите в Sina Weibo с помощью файлов cookie.
//Собираем страницы из Sina Weibo, для доступа к которым требуется вход в систему $ql = QueryList::get('http://weibo.com','param1=testvalue & params2=somevalue',[ 'headers' => [ //Fill в файле cookie «Cookie», полученном из браузера => 'SINAGLOBAL=546064; wb_cmtLike_2112031=1; wvr=6;....' ]]);//echo $ql->getHtml();echo $ql-> find ('title')->text();//Вывод: Моя домашняя страница Weibo — открывайте для себя что-то новое в любое время и в любом месте
Использовать HTTP-прокси
$urlParams = ['param1' => 'testvalue','params2' => 'somevalue'];$opts = [// Установить http-прокси 'proxy' => 'http://222.141.11.17:8118', / /Установить таймаут, единица измерения: секунды 'timeout' => 30, // Формируем http-заголовки 'headers' => [ 'Referer' => 'https://querylist.cc/', 'User-Agent' => ' тестирование/1.0', 'Принять' => 'application/json', 'X-Foo' => ['Bar', 'Baz'], 'Cookie' => 'abc=111;xxx=222' ]]; $ql->get('http://httpbin.org/get',$urlParams,$opts);// echo $ql->getHtml();
Имитация входа
// Используйте post для входа в систему $ql = QueryList::post('http://xxxx.com/login',[ 'username' => 'admin', 'password' => '123456'])->get (' http://xxx.com/admin');//Собираем страницы, для доступа к которым требуется вход в систему $ql->get('http://xxx.com/admin/page');//echo $ql- >getHtml ();
Операции с формой формы
Имитировать вход в GitHub
// Получаем экземпляр QueryList $ql = QueryList::getInstance() // Получаем форму входа $form = $ql->get('https://github.com/login')->find('form'; ) ;//Введите имя пользователя и пароль GitHub $form->find('input[name=login]')->val('ваше имя пользователя или адрес электронной почты github');$form->find('input[name= пароль]' )->val('ваш пароль GitHub');//Сериализованные данные формы $fromData = $form->serializeArray();$postData = [];foreach ($fromData as $item) { $postData[$ item[ 'name']] = $item['value'];}//Отправить форму входа $actionUrl = 'https://github.com'.$form->attr('action');$ql-> post( $actionUrl,$postData);//Определяем, успешен ли вход в систему// echo $ql->getHtml();$userName = $ql->find('.header-nav-current-user>.css- truncate-target' )->text();if($userName){ echo 'Вход выполнен успешно! Добро пожаловать:'.$userName;}else{ echo 'Не удалось войти в систему!';}
Расширение функции привязки
Настройте и расширите метод myHttp:
$ql = QueryList::getInstance();//Привязываем метод myHttp к объекту QueryList $ql->bind('myHttp',function ($url){ // $это текущий объект QueryList $html = file_get_contents( $url); $this->setHtml($html); return $this;});//Затем вы можете вызвать $data = $ql->myHttp('https://toutiao.io' )->find( 'h3 a')->texts();print_r($data->all());
Или инкапсулируйте реализацию в класс и привяжите ее следующим образом:
$ql->bind('myHttp',function ($url){ return new MyHttp($this,$url);});
Использование плагина
Используйте плагин PhantomJS для сбора динамически отображаемых страниц JavaScript:
//Установим путь к бинарному файлу PhantomJS во время установки $ql = QueryList::use(PhantomJs::class,'/usr/local/bin/phantomjs'); //Собираем мобильную игру Toutiao $data = $ql->browser ( 'https://m.toutiao.com')->find('p')->texts();print_r($data->all());// Использовать HTTP-прокси $ql->browser(' https://m.toutiao.com',false,['--proxy' => '192.168.1.42:8080', '--proxy-type' => 'http'])
Используйте многопоточный плагин CURL для сбора рейтингов GitHub в многопоточном режиме:
$ql = QueryList::use(CurlMulti::class);$ql->curlMulti([ 'https://github.com/trending/php', 'https://github.com/trending/go', / /.....больше URL]) // Вызов этого обратного вызова при успешном завершении каждой задачи ->success(function (QueryList $ql,CurlMulti $curl,$r){ echo "Текущий URL:{$r['info] ' ]['url']} rn"; $data = $ql->find('h3 a')->texts(); print_r($data->all());}) // каждый Обратный вызов при сбое задачи->error(function ($errorInfo,CurlMulti $curl){ echo "Текущий URL:{$errorInfo['info']['url']} rn"; print_r($errorInfo['error') ]);})->start([// Максимальное количество параллелизма 'maxThread' => 10, // Количество повторных попыток с ошибкой 'maxTry' => 3,]);
jae-jae/QueryList-PhantomJS: используйте PhantomJS для сбора динамически отображаемых страниц JavaScript.
jae-jae/QueryList-CurlMulti: многопоточная коллекция Curl
jae-jae/QueryList-AbsoluteUrl: преобразовать относительный путь URL-адреса в абсолютный путь
jae-jae/QueryList-Rule-Google : поисковая система Google.
jae-jae/QueryList-Rule-Baidu: поисковая система Baidu