|
| Дата |
|
USD/RUB | 90.2486 | BTC/USD | 68530.9384 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
10.09.2010, 19:41
|
Start Post: Парсинг HTML- 3 подхода
|
Сеньор Член
Регистрация: 11.04.2007
Адрес: The World
Сообщений: 1,125
Бабло: $107796
|
Полная версия (с сорцами - в блоге)
Перед нашей братией часто возникает необходимость парсить html-страницы(тк добровольно контент посредством API/RSS/XML-данных отдают далекоо не все Захотелось написать мне эту статью потому, что многие даже не представляют что есть варианты парсинга кроме регулярок
1.Строковые функции
Использование функций strpos / substr (поиск нужного места — извлечение подстроки) . Самый быстрый вариант (в 8 раз быстрее регулярок по результатам некоторых тестов). Из недостатков — громоздкий код, решается написанием библиотечных функций, например, такую (skipped)
2.Регулярные выражения
Самый компактный способ записи желаемого ) И самый любимы у сеошников ) Из минусов — код быстро становится нечитаемым. Как-то раз приходилось сталкиваться с парсером мегапорносайта, в котором было регулярок на два листа ) Пришлось писать заново. По скорости этот вариант между строковыми функциями и Dom-деревом.
3.Разбор DOM-дерева
Самый медленный способ, но самый надежный. Если в предыдущих способах все обычно ломается от появления лишних кавычек или пробела в коде (или вписывания разработчиком нового аттрибута итп), то Dom-дерево будет парсится пока у нужного элемента не сменится name или id. Для всех популярных языков программирования как правило уже есть библиотеки разбора, вам остается лишь дописывать функции типа этой (skipped)
|
|
|
17.09.2010, 04:43
|
#22
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
Цитата:
Сообщение от sandy
для Джавы многие дом-парсеры умеют фиксить ошибки в хтмл. для других языков тоже самое думаю.
|
Да, конечно, в каждом языке есть свои (x)html фиксеры, которые пытаются исправить ошибки верстки, но это дополнительные расходы ресурсов, которые еще больше утяжеляют dom-парсеры. Для PHP часто используют библиотеку tidy.
|
|
|
17.09.2010, 04:49
|
#23
|
Ебланнед
Регистрация: 03.06.2008
Сообщений: 3,846
Бабло: $432125
|
иногда меня просто бесит оптимизация, для чего она, чтобы пользователь при современной мощи компов почувствовал 0.N1, где N в неебическом периоде 0, улучшение скорости? ))))))))))
p.s. я это время на дополнительный функционал потрачу )
|
|
|
17.09.2010, 05:02
|
#24
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
super, ты, видимо, не использовал тяжелые алгоритмы параллельно или внутри циклов. Мне часто приходиться оптимизировать код и докупить железа - не всегда выход
|
|
|
17.09.2010, 05:15
|
#25
|
Ебланнед
Регистрация: 03.06.2008
Сообщений: 3,846
Бабло: $432125
|
Цитата:
Сообщение от chesser
super, ты, видимо, не использовал тяжелые алгоритмы параллельно или внутри циклов. Мне часто приходиться оптимизировать код и докупить железа - не всегда выход
|
я не буду утверждать что ты не прав насчёт тяжёлых алго потому, что не знаю основную твою мысль под этим твоим словочетанием, просто скажу, для работы, именно для работы, пох вообще на чём пишется, летают, ну у меня так ), как объекты, преломляющие пространства и оказывающие в других вселенных одним нажатием кнопки или мышки ) , я понимаю есть сложные алго, многое анализирующие, но я тебе так скажу, все эти алго не намного быстрее выполняются в реализациях на соответствующих яп, дающих соответствующую скорость
p.s. что в наше время современность компов так сказать, игра )
|
|
|
17.09.2010, 11:55
|
#26
|
Сеньор Член
Регистрация: 11.04.2007
Адрес: The World
Сообщений: 1,125
Бабло: $107796
ТС -->
|
ТС
Цитата:
Сообщение от super
иногда меня просто бесит оптимизация, для чего она, чтобы пользователь при современной мощи компов почувствовал 0.N1, где N в неебическом периоде 0, улучшение скорости? ))))))))))
p.s. я это время на дополнительный функционал потрачу )
|
ботмастер, перелогинься
|
|
|
17.09.2010, 20:08
|
#27
|
Senior Member
Регистрация: 21.08.2008
Сообщений: 145
Бабло: $13390
|
Цитата:
Сообщение от WebNinja
|
Улёт куда? Очень может быть что улёт в хуй. Гугл не парсит c ошибками через раз, xml тоже так же сейчас xml от одной партнёрки ковыряю так 837 заведомо существующих блоков так и не нашлись супом нихуя, а остальные точно такие же по точно такому же условию - пожалуйста. Так что не улёт а хорошая либа для определённых целей, но парсер там - кал.
__________________
ТРОЛОЛО над Зимним Дворцом в Санкт-Петербурге. Сенсация!!!
Последний раз редактировалось Cabal; 17.09.2010 в 20:13.
|
|
|
17.09.2010, 20:56
|
#28
|
Senior Member
Регистрация: 18.05.2009
Сообщений: 928
Бабло: $196595
|
Cabal, попробуй юзать BeautifulSoup апи с парсером html5lib.
Т.е. html5lib парсит html и затем предоставляет доступ к DOM через несколько API, один из которых BeautifulSoup.
__________________
TgScan - узнай Telegram группы, в которых состоит человек
|
|
|
17.09.2010, 21:06
|
#29
|
Senior Member
Регистрация: 21.08.2008
Сообщений: 145
Бабло: $13390
|
Цитата:
Сообщение от lorien
Cabal, попробуй юзать BeautifulSoup апи с парсером html5lib.
Т.е. html5lib парсит html и затем предоставляет доступ к DOM через несколько API, один из которых BeautifulSoup.
|
Спасибо, я это всё знаю. Так и дёлаю - когда спотыкается Soup переписываю на html5lib(ну или на регулярки). Но дело в том, как я читал где то, разработчики htm5lib предупреждают - этот интерфейс там не навечно, рано или поздно халява кончится и он исчезнет в новых версиях. Хз может я "слышал звон" просто но вроде и не понял о чём там речь..
__________________
ТРОЛОЛО над Зимним Дворцом в Санкт-Петербурге. Сенсация!!!
|
|
|
17.09.2010, 21:31
|
#30
|
Senior Member
Регистрация: 21.08.2008
Сообщений: 145
Бабло: $13390
|
О прикольно, ща хотел найти информацию о том что BS не будет поддерживаться, нашел один только форум и ты там lorien, челу с ником dmnBrest что то отвечаешь по hml5lib Как там: "до чего техника дошла вашу маму и тут и там уже показывают)"(c)
__________________
ТРОЛОЛО над Зимним Дворцом в Санкт-Петербурге. Сенсация!!!
|
|
|
17.09.2010, 22:51
|
#31
|
Силденафил
Регистрация: 17.05.2009
Сообщений: 546
Бабло: $11198228
|
Немного не в тему правда:
Кто как парсит хуизы доменов? Мне нада парсить допустим когда проэкспайрятся или когда зареганы домены. Сейчас у меня в систем32 лежит вхуиз.екзе который отдаёт скрипту хуиз домена для дальнейшей обработки. Так вот инфу из хуизов разных доменов нужно парсить поразному, у меня в скрипте проходит через 15 регулярок это всё, в итоге срабатывает на 80%. Как лучше сделать хз
По теме: регулярки рулез)
|
|
|
|