Привет хабр, думаю у некоторых из вас возникала потребность стянуть что нибудь нужное с какова нибудь сайта. Но писать тонны функций, чтобы вытащить фразу, это очень муторно, долго и не продуктивно.
Представляю вашему вниманию phpQuery. Это php вариант известного javascript фраемворка — jQuery.
Автор постарался на славу и портировал почти всё что нам нужно.
Давайте посмотрим что она умеет.
А умеет она всё, что умеет её старший брат jQuery.
Собственно, для начала, далеко ходить не будем и остановимся на %username%.habrahabr.ru/blog/
Имеется довольно много способов сделать это.
phpQuery::newDocument($html, $contentType = null) Создаём новый документ из разметки. Если не указали $contentType, будет определен основываясь на разметке. Если не получится то будем считать что это, text/html в utf-8.
phpQuery::newDocumentFile($file, $contentType = null) Создаём новый документ из файла. Работает также как и newDocument()
phpQuery::newDocumentHTML($html, $charset = 'utf-8')
phpQuery::newDocumentXHTML($html, $charset = 'utf-8')
phpQuery::newDocumentXML($html, $charset = 'utf-8')
phpQuery::newDocumentPHP($html, $contentType = null) Подробнее можете почитать об этом здесь.
phpQuery::newDocumentFileHTML($file, $charset = 'utf-8')
phpQuery::newDocumentFileXHTML($file, $charset = 'utf-8')
phpQuery::newDocumentFileXML($file, $charset = 'utf-8')
phpQuery::newDocumentFilePHP($file, $contentType) Подробнее можете почитать об этом здесь.
Ну а мы, далеко ходить не будем. Давай %username%, распарсим твои записи в блоге. Сначала скачаем phpQuery. Теперь создаём что то вроде index.php
Это всего лишь малая часть того что возможно сделать.
Также вместе с ней поставляется такая штука как jQueryServer. По сути, это тоже самое что и phpQuery, но на стороне клиента.
Пример из демки
Данный вариант довольно практичный и позволяет распарсить контент с нескольких сайтов в несколько секунд, не утруждая себя в написании php кода.
Google Code
Официальный блог
Если вам интересно в следующей статье я хочу рассмотреть парсинг сайтов доступных только авторизованным пользователям (без капчи конечна). Да, phpQuery умеет и это, правда не без помощи Zend Framework.
Представляю вашему вниманию phpQuery. Это php вариант известного javascript фраемворка — jQuery.
Автор постарался на славу и портировал почти всё что нам нужно.
- Selectors
- Attributes
- Traversing
- Manipulation
- Ajax
- Events
- Utilities
- Plugin ports
Давайте посмотрим что она умеет.
А умеет она всё, что умеет её старший брат jQuery.
Собственно, для начала, далеко ходить не будем и остановимся на %username%.habrahabr.ru/blog/
Имеется довольно много способов сделать это.
phpQuery::newDocument($html, $contentType = null) Создаём новый документ из разметки. Если не указали $contentType, будет определен основываясь на разметке. Если не получится то будем считать что это, text/html в utf-8.
phpQuery::newDocumentFile($file, $contentType = null) Создаём новый документ из файла. Работает также как и newDocument()
phpQuery::newDocumentHTML($html, $charset = 'utf-8')
phpQuery::newDocumentXHTML($html, $charset = 'utf-8')
phpQuery::newDocumentXML($html, $charset = 'utf-8')
phpQuery::newDocumentPHP($html, $contentType = null) Подробнее можете почитать об этом здесь.
phpQuery::newDocumentFileHTML($file, $charset = 'utf-8')
phpQuery::newDocumentFileXHTML($file, $charset = 'utf-8')
phpQuery::newDocumentFileXML($file, $charset = 'utf-8')
phpQuery::newDocumentFilePHP($file, $contentType) Подробнее можете почитать об этом здесь.
Ну а мы, далеко ходить не будем. Давай %username%, распарсим твои записи в блоге. Сначала скачаем phpQuery. Теперь создаём что то вроде index.php
<?php
require ('phpQuery/phpQuery.php');
$habrablog = file_get_contents('http://%username%.habrahabr.ru/blog/');
$document = phpQuery::newDocument($habrablog);
$hentry = $document->find('div.hentry');
foreach ($hentry as $el) {
$pq = pq($el); // Это аналог $ в jQuery
$pq->find('h2.entry-title > a.blog')->attr('href', 'http://%username%.habrahabr.ru/blog/')->html('%username%'); // меняем атрибуты найденого элемента
$pq->find('div.entry-info')->remove(); // удаляем ненужный элемент
$tags = $pq->find('ul.tags > li > a');
$tags->append(': ')->prepend(' :'); // добавляем двоеточия по бокам
$pq->find('div.content')->prepend('<br />')->prepend($tags); // добавляем контент в начало найденого элемента
}
echo $hentry;
?>
Это всего лишь малая часть того что возможно сделать.
Также вместе с ней поставляется такая штука как jQueryServer. По сути, это тоже самое что и phpQuery, но на стороне клиента.
Пример из демки
<script type="text/javascript">
jQuery.serverConfig.url = '/phpQuery/jQueryServer/jQueryServer.php';
function demo() {
$.server({
url: document.location.toString(),
dataType: 'json'
})
.find('li')
.client(function(response){
$.each(response, function(k, li){
$('ul').append(li);
});
});
}
$(function(){
$('ul').append('<li>above LIs will be downloaded and appended below in 2 seconds...</li>');
setTimeout(demo, 2000);
});
</script>
Данный вариант довольно практичный и позволяет распарсить контент с нескольких сайтов в несколько секунд, не утруждая себя в написании php кода.
Материалы по теме
Google Code
Официальный блог
Если вам интересно в следующей статье я хочу рассмотреть парсинг сайтов доступных только авторизованным пользователям (без капчи конечна). Да, phpQuery умеет и это, правда не без помощи Zend Framework.