Реклама на сайте Advertise with us

Чем парсить DOM?

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 02/06/16 в 10:02       Ответить с цитатойцитата 

Подскажите, чем лучше парсить DOM элемены?
И что для этого нужно, в том смысле, что на локалке стоит WAMPSERVER, есть cURL, можно парсить и вытаскивать, то что нужно регулярками, но как я понял работать с DOM более удобно.

1
 

127.0.0.1

С нами с 26.04.06
Сообщения: 1092
Рейтинг: 557

Ссылка на сообщениеДобавлено: 02/06/16 в 11:35       Ответить с цитатойцитата 

10
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 02/06/16 в 12:01       Ответить с цитатойцитата 

localhost писал:
http://php.net/manual/ru/class.domdocument.php

не?


Спасибо!

1
 



С нами с 06.07.15
Сообщения: 110
Рейтинг: 171

Ссылка на сообщениеДобавлено: 02/06/16 в 21:36       Ответить с цитатойцитата 

Еще удобней парсить http://simplehtmldom.sourceforge.net/

1
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 03/06/16 в 08:10       Ответить с цитатойцитата 

gcc писал:
Еще удобней парсить http://simplehtmldom.sourceforge.net/

Мельком просматривал, но я так понял это что-то дополнительно нужно подключать, так в чистом виде код не работает.
Цитата:
Fatal error: Call to undefined function str_get_html()

1
 



С нами с 25.12.14
Сообщения: 602
Рейтинг: 441


Передовик Master-X (16.04.2017) Передовик Master-X (01.05.2017) Передовик Master-X (16.05.2017) Передовик Master-X (01.06.2017)
Ссылка на сообщениеДобавлено: 03/06/16 в 08:16       Ответить с цитатойцитата 

Lexikon писал:
Мельком просматривал, но я так понял это что-то дополнительно нужно подключать, так в чистом виде код не работает.


ну так парсер по ссылке и надо подключить icon_cool.gif

1
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 13/08/16 в 20:07       Ответить с цитатойцитата 

Но вот как спарсить с помощью DOMDocument, тэг с классом?
Как пример:
Код:
<div class="index">text</div>

если бы было
Код:
<div id="index">text</div>

то тогда можно было бы использовать getElementById.
А как же поступать имея class="index" ?

0
 



С нами с 25.12.14
Сообщения: 602
Рейтинг: 441


Передовик Master-X (16.04.2017) Передовик Master-X (01.05.2017) Передовик Master-X (16.05.2017) Передовик Master-X (01.06.2017)
Ссылка на сообщениеДобавлено: 13/08/16 в 20:23       Ответить с цитатойцитата 

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/ как и советовали раньше.

8
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 13/08/16 в 21:05       Ответить с цитатойцитата 

dizziness писал:
По другому и не ответишь domdocument get by class

по первой же ссылке со стаковерфлоу есть решение

http://stackoverflow.com/a/31616848/6288358


а еще лучше перестать есть кактус и поставить тот же http://simplehtmldom.sourceforge.net/ как и советовали раньше.



Благодарю!
Думаю, что http://simplehtmldom.sourceforge.net/ при массовом парсинге и с большим кол-вом элементов, то что нужно, а когда нужно дернуть что-то определенное, можно и что-то по проще. Но в любом случае благодарю!

0
 



С нами с 07.08.16
Сообщения: 12
Рейтинг: 11

Ссылка на сообщениеДобавлено: 13/08/16 в 23:49       Ответить с цитатойцитата 

Simplexml попробуйте, просто и понятно.

8
 

Любитель хорошего ;)

С нами с 08.06.07
Сообщения: 16151
Рейтинг: 6269


Передовик Master-X (01.06.2009) Передовик Master-X (01.10.2009) Передовик Master-X (16.10.2009) Передовик Master-X (01.12.2009) Передовик Master-X (01.11.2010) Ветеран трепа Master-X (16.02.2011)
Ссылка на сообщениеДобавлено: 14/08/16 в 00:12       Ответить с цитатойцитата 

nokogiri охуенен. icon_cool.gif
Задачу "дёрнуть что-то определённое" решает в одну строчку.

Отличные серверы от SGManaged!

8
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 14/08/16 в 08:50       Ответить с цитатойцитата 


если имя класса будет состоять из двух параметров, к примеру
Код:
<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 раз(а)

0
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 14/08/16 в 09:03       Ответить с цитатойцитата 

dizziness писал:

а еще лучше перестать есть кактус и поставить тот же http://simplehtmldom.sourceforge.net/ как и советовали раньше.

Та же проблема что и в nokogiri, указана постом выше.

0
 



С нами с 11.10.12
Сообщения: 428
Рейтинг: 1032


Передовик Master-X (16.11.2012)
Ссылка на сообщениеДобавлено: 14/08/16 в 11:11       Ответить с цитатойцитата 

Попробуй https://packagist.org/packages/electrolinux/phpquery (https://github.com/electrolinux/phpquery)

apache, bash, css, elasticsearch, ffmpeg, html, js, mysql, mongo, nginx, php; *nix only

8
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 14/08/16 в 11:37       Ответить с цитатойцитата 

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

0
 



С нами с 09.08.12
Сообщения: 185
Рейтинг: 378

Ссылка на сообщениеДобавлено: 17/08/16 в 07:56       Ответить с цитатойцитата 

DOM (php функции для работы с ним) сам посебе ничего такого в плане парсинга не предоставляет. с ним только проблемы с кодировкой и невалидным html

https://github.com/technosophos/querypath
парсить через запросы в виде через css-селекторов намного удобнее.

а так и регулярки тоже весьма не плохи - если речь про парсинг каких то небольших участков данных - глобально и надежно.

8
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 17/08/16 в 08:03       Ответить с цитатойцитата 

rickdeckard писал:
DOM (php функции для работы с ним) сам посебе ничего такого в плане парсинга не предоставляет. с ним только проблемы с кодировкой и невалидным html

https://github.com/technosophos/querypath
парсить через запросы в виде через css-селекторов намного удобнее.

а так и регулярки тоже весьма не плохи - если речь про парсинг каких то небольших участков данных - глобально и надежно.


Благодарю! Но пока из всего, что тестировал понравился "nokogiri", отлично всё выдает в массиве, причем можно, как большую часть дерева DOM получить массивом, так и определенный элемент, управляя селекторами.
Сам же класс DOMDocument, не всегда может удовлетворить потребности, ну а с проблемами кодировки я столкнулся и в "nokogiri" но исправил это как и в самим классе DOMDocument.
Когда в свое время искал реализацию парсинга одной проблемной части HTML кода, мне как раз и сказали про DOM, поэтому отказался от регулярок.

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »