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 писал:

Спасибо!
цитата
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 писал:
Мельком просматривал, но я так понял это что-то дополнительно нужно подключать, так в чистом виде код не работает.


ну так парсер по ссылке и надо подключить icon_cool.gif
цитата
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 охуенен. icon_cool.gif
Задачу "дёрнуть что-то определённое" решает в одну строчку.
цитата
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 icon_smile.gif и всё гуд!
Т.е.
Код:
$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 - охеренная вещь. icon_smile.gif smail54.gif При этом всё вмещается в файл 9 кб. smail54.gif
Переделал основной код под nokogiri, и теперь рад trollface.png smail101.gif
цитата
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, поэтому отказался от регулярок.


Эта страница в полной версии