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