Comments 35
Спасибо, интересно было почитать. А по поводу производительности — вы сравнивали насколько это быстрее/медленнее чем парсить используя регекспы?
сегодня с утра как раз ручками писал… особо писать нечего кроме регулярки
работает. но кривота гербедж коллектора в php такова что на парсинге сайтов в 20 000 страниц не успевает удалять объекты (которые удаляются implicitly) скрипт отжирает до гига памяти. мораль — учим XPath & DOMXML
Таким способом «XPath & DOMXML» память намного экономнее используется?
ну метров 102-105 на неоптимизированном php-cli. скорость работы тоже на пару порядков выше — 20-30 минут вместо 4 часов на phpquery. да и кода меньше получается.
Спасибо за консультацию, тоже в принципе достаточно много, но как говорится, за удобство приходится платить. Если памяти мало, то мой вывод — лучше использовать регулярные выражения.
И еще интересно, как на счет потребления памяти по сравнению с регулрными выражениями?
Я конечно не тестировал, но предполагаю, что ругулярки будут выигрывать на порядок.
Я конечно не тестировал, но предполагаю, что ругулярки будут выигрывать на порядок.
Штука очень забавная. Правда не без глюков.
А насчет регулярок — да, быстрее, но с ней гораздо проще, особенно при разборе сложных докментов.
А насчет регулярок — да, быстрее, но с ней гораздо проще, особенно при разборе сложных докментов.
А если документ невалидный в плане хмл?
Хороший инструмент. спасибо!
Как бы ещё добраться до контента, генерируемого динамически, например тем же Javascript'ом?
Как бы ещё добраться до контента, генерируемого динамически, например тем же Javascript'ом?
тем же javascript'ом и добраться :)
передать на сервер можно через ajax
передать на сервер можно через ajax
Не совсем понял что Вы Имеете в виду. Вы предлагаете с помощью phpquery решить этот вопрос или «вручную» разбираться в ява скрипте? А если там какое-либо сложное высчитывамие переменных для запроса или не запрос вовсе, а какой-нибудь document.write, но опять-таки со сложновысчитанными параметрами?
Вижу очень безумную идею, расширение к firefox, которое дампит данные по факту загрузки страницы и отсылает их на сервер. где они уже и сохраняются, при этом можно firefox автоматизировать, пусть сам ходит по страницам и отсылает данные, жаль что это клиент side
нет. Если проблема частного характера, то можно тем же jquery повесить обработчики и генерируемый контент пересылать на сервер.
Если общего и неизвестно какие функции генерируют контент, можно проверять блоки данных на изменение с первоначальной информацией.
вообще к задаче лучше подходить практически — решать конкретно то что нужно делать. потом и обобщить можно…
Если общего и неизвестно какие функции генерируют контент, можно проверять блоки данных на изменение с первоначальной информацией.
вообще к задаче лучше подходить практически — решать конкретно то что нужно делать. потом и обобщить можно…
Можете привести пример задачи общего характера?
притянутый за уши только :)
к примеру есть несколько сайтов с разной структурой, где стоят какие то информеры, которые тянуться уже после загрузки страницы. расположение неизвестно.
имхо, даже частная задача будет встречаться редко и писать для этого отдельную программку смысла нет, видимо по этому и нету такого в phpQuery
к примеру есть несколько сайтов с разной структурой, где стоят какие то информеры, которые тянуться уже после загрузки страницы. расположение неизвестно.
имхо, даже частная задача будет встречаться редко и писать для этого отдельную программку смысла нет, видимо по этому и нету такого в phpQuery
А как Вы предлагаете
если они подгружатеся динамически уже после загрузки страницы?
проверять блоки данных на изменение с первоначальной информацией
если они подгружатеся динамически уже после загрузки страницы?
без понятия. надо рассматривать конкретную задачу :)
***теоретически… допустим у нас есть сайт, которые разбит по блокам с какими то id
при первом парсинге запоминаем эти блоки и их длину (можно на клиенте str.length)
проходимся опять по блокам и сраниваем их длину. если контента стало больше — появилось свеженькое.
***теоретически… допустим у нас есть сайт, которые разбит по блокам с какими то id
при первом парсинге запоминаем эти блоки и их длину (можно на клиенте str.length)
проходимся опять по блокам и сраниваем их длину. если контента стало больше — появилось свеженькое.
Афигенная штука, если надо распарсить сложный древовидный документ. На одной странице работает терпимо, а весь сайт парит медленно. За удобство приходится платить?
Думаю, это библиотека подходит для использования в условиях выделенного сервера с возможностью запуска PHP без ограничения памяти и времени исполнения, а на виртуальном хостинге — обрывается.
Думаю, это библиотека подходит для использования в условиях выделенного сервера с возможностью запуска PHP без ограничения памяти и времени исполнения, а на виртуальном хостинге — обрывается.
Как вариант работа с домашнего сервера с предварительной загрузкой страницы через wget.
+ прикручиваем потоки для php, время должно сократиться, а вот загрузка (как памяти так и процессорных мощностей) может возрасти, вопрос только в каких пределах.
+ прикручиваем потоки для php, время должно сократиться, а вот загрузка (как памяти так и процессорных мощностей) может возрасти, вопрос только в каких пределах.
А почему именно wget'ом хотите забирать, а не, например, curl'ом?
При выводе скаченной страницы без парсинга все выклядит нормально, после парсинга бьются русские буквы? как решить эту проблему?
возможно сам фаил скрипта не в той кодировке или кодировка сайта отлична от UTF-8
echo iconv("windows-1251", "utf-8", $content);
уберите указание кодировки в коде
Мне помогло
$doc = phpQuery::newDocumentHTML($data['document']);
Мне помогло
public static function newDocumentHTML($markup = null, $charset = null) {
$contentType = $charset
? ";charset=$charset"
: '';
return self::newDocument($markup, "text/html{$contentType}");
}
Sign up to leave a comment.
парсим сайты легко и непринуждённо вместе с phpQuery