Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Чем парсить DOM?
Новая тема
Ответить
цитата
02/06/16 в 10:02
Lexikon
Подскажите, чем лучше парсить DOM элемены?
И что для этого нужно, в том смысле, что на локалке стоит WAMPSERVER, есть cURL, можно парсить и вытаскивать, то что нужно регулярками, но как я понял работать с DOM более удобно.
цитата
02/06/16 в 11:35
localhost
http://php.net/manual/ru/class.domdocument.php
не?
цитата
02/06/16 в 12:01
Lexikon
localhost писал:
http://php.net/manual/ru/class.domdocument.php
не?
Спасибо!
цитата
02/06/16 в 21:36
IgorZ
Еще удобней парсить
http://simplehtmldom.sourceforge.net/
цитата
03/06/16 в 08:10
Lexikon
gcc писал:
Еще удобней парсить
http://simplehtmldom.sourceforge.net/
Мельком просматривал, но я так понял это что-то дополнительно нужно подключать, так в чистом виде код не работает.
Цитата:
Fatal error: Call to undefined function str_get_html()
цитата
03/06/16 в 08:16
dizziness
Lexikon писал:
Мельком просматривал, но я так понял это что-то дополнительно нужно подключать, так в чистом виде код не работает.
ну так парсер по ссылке и надо подключить
цитата
13/08/16 в 20:07
Lexikon
Но вот как спарсить с помощью DOMDocument, тэг с классом?
Как пример:
Код:
<div class="index">text</div>
если бы было
Код:
<div id="index">text</div>
то тогда можно было бы использовать getElementById.
А как же поступать имея class="index" ?
цитата
13/08/16 в 20:23
dizziness
Lexikon писал:
Но вот как спарсить с помощью DOMDocument, тэг с классом?
Как пример:
Код:
<div class="index">text</div>
если бы было
Код:
<div id="index">text</div>
то тогда можно было бы использовать getElementById.
А как же поступать имея class="index" ?
По другому и не ответишь
domdocument get by class
по первой же ссылке со стаковерфлоу есть решение
http://stackoverflow.com/a/31616848/6288358
а еще лучше перестать есть кактус и поставить тот же
http://simplehtmldom.sourceforge.net/
как и советовали раньше.
цитата
13/08/16 в 21:05
Lexikon
dizziness писал:
По другому и не ответишь
domdocument get by class
по первой же ссылке со стаковерфлоу есть решение
http://stackoverflow.com/a/31616848/6288358
а еще лучше перестать есть кактус и поставить тот же
http://simplehtmldom.sourceforge.net/
как и советовали раньше.
Благодарю!
Думаю, что
http://simplehtmldom.sourceforge.net/
при массовом парсинге и с большим кол-вом элементов, то что нужно, а когда нужно дернуть что-то определенное, можно и что-то по проще. Но в любом случае благодарю!
цитата
13/08/16 в 23:49
Kurses
Simplexml попробуйте, просто и понятно.
цитата
14/08/16 в 00:12
goodlover
nokogiri охуенен.
Задачу "дёрнуть что-то определённое" решает в одну строчку.
цитата
14/08/16 в 08:50
Lexikon
если имя класса будет состоять из двух параметров, к примеру
Код:
<div class="left index">.....<div>
то такой класс не принимается, на выходе имеем пустой массив, приходится писать .left и тогда приходится уже откидавать всё лишнее, получается весь смысл парсинга в одну строку теряется.
PS: но если использовать
Код:
$saw->get('div[class=left index]')->toArray();
работает так как надо.
Но как быть с кодировкой, если в DOMDocument я делал так
[code ]$dom = new DOMDocument;
$dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));[/code]
то как быть тут?
PS: прописал это в самом файле с кодом nokogiri
и всё гуд!
Т.е.
Код:
$this->loadHtml($htmlString);
заменил на
Код:
$this->loadHtml(mb_convert_encoding($htmlString, 'HTML-ENTITIES', 'UTF-8'));
Последний раз редактировалось: Lexikon (
14/08/16 в 09:49
), всего редактировалось 4 раз(а)
цитата
14/08/16 в 09:03
Lexikon
dizziness писал:
а еще лучше перестать есть кактус и поставить тот же
http://simplehtmldom.sourceforge.net/
как и советовали раньше.
Та же проблема что и в nokogiri, указана постом выше.
цитата
14/08/16 в 11:11
johndoe2
Попробуй
https://packagist.org/packages/electrolinux/phpquery
(https://github.com/electrolinux/phpquery)
цитата
14/08/16 в 11:37
Lexikon
johndoe2 писал:
Попробуй
https://packagist.org/packages/electrolinux/phpquery
(https://github.com/electrolinux/phpquery)
Благодарю, но уже сделал то, что нужно на nokogiri - охеренная вещь.
При этом всё вмещается в файл 9 кб.
Переделал основной код под nokogiri, и теперь рад
цитата
17/08/16 в 07:56
rickdeckard
DOM (php функции для работы с ним) сам посебе ничего такого в плане парсинга не предоставляет. с ним только проблемы с кодировкой и невалидным html
https://github.com/technosophos/querypath
парсить через запросы в виде через css-селекторов намного удобнее.
а так и регулярки тоже весьма не плохи - если речь про парсинг каких то небольших участков данных - глобально и надежно.
цитата
17/08/16 в 08:03
Lexikon
rickdeckard писал:
DOM (php функции для работы с ним) сам посебе ничего такого в плане парсинга не предоставляет. с ним только проблемы с кодировкой и невалидным html
https://github.com/technosophos/querypath
парсить через запросы в виде через css-селекторов намного удобнее.
а так и регулярки тоже весьма не плохи - если речь про парсинг каких то небольших участков данных - глобально и надежно.
Благодарю! Но пока из всего, что тестировал понравился "nokogiri", отлично всё выдает в массиве, причем можно, как большую часть дерева DOM получить массивом, так и определенный элемент, управляя селекторами.
Сам же класс DOMDocument, не всегда может удовлетворить потребности, ну а с проблемами кодировки я столкнулся и в "nokogiri" но исправил это как и в самим классе DOMDocument.
Когда в свое время искал реализацию парсинга одной проблемной части HTML кода, мне как раз и сказали про DOM, поэтому отказался от регулярок.
Новая тема
Ответить
Эта страница в полной версии