Парсинг HTML- 3 подхода - Форум успешных вебмастеров - GoFuckBiz.com - Страница 2
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB88.6852
BTC/USD68271.8247
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 10.09.2010, 19:41
Start Post: Парсинг HTML- 3 подхода 
  #11
sandy
Сеньор Член
 
Аватар для sandy
 
Регистрация: 11.04.2007
Адрес: The World
Сообщений: 1,125
Бабло: $107796
Отправить сообщение для sandy с помощью ICQ
По умолчанию

Полная версия (с сорцами - в блоге)


Перед нашей братией часто возникает необходимость парсить html-страницы(тк добровольно контент посредством API/RSS/XML-данных отдают далекоо не все Захотелось написать мне эту статью потому, что многие даже не представляют что есть варианты парсинга кроме регулярок

1.Строковые функции
Использование функций strpos / substr (поиск нужного места — извлечение подстроки) . Самый быстрый вариант (в 8 раз быстрее регулярок по результатам некоторых тестов). Из недостатков — громоздкий код, решается написанием библиотечных функций, например, такую (skipped)

2.Регулярные выражения
Самый компактный способ записи желаемого ) И самый любимы у сеошников ) Из минусов — код быстро становится нечитаемым. Как-то раз приходилось сталкиваться с парсером мегапорносайта, в котором было регулярок на два листа ) Пришлось писать заново. По скорости этот вариант между строковыми функциями и Dom-деревом.

3.Разбор DOM-дерева
Самый медленный способ, но самый надежный. Если в предыдущих способах все обычно ломается от появления лишних кавычек или пробела в коде (или вписывания разработчиком нового аттрибута итп), то Dom-дерево будет парсится пока у нужного элемента не сменится name или id. Для всех популярных языков программирования как правило уже есть библиотеки разбора, вам остается лишь дописывать функции типа этой (skipped)
sandy вне форума  
Старый 10.09.2010, 23:35   #12
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

Цитата:
Сообщение от Hector Посмотреть сообщение
регулярки юзаю) на скорость плевать
так это наоборот самый быстрый и простой в работе способ, "строковый" не в счет в виду его убогости
А с домом бывают траблы: то html ему не валидный, то кодировка не та, да и памяти он жрет немеряно, попробуйте прогрузить html размером в 20 мегабайт

Использую оба способа, но чаще dom-xpath, т.к. он более высоко уровня как бы
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 10.09.2010, 23:45   #13
imgreen
Senior Member
 
Аватар для imgreen
 
Регистрация: 15.11.2008
Сообщений: 13,239
Бабло: $247847011
По умолчанию

Цитата:
Использую оба способа, но чаще dom-xpath, т.к. он более высоко уровня как бы
а смысл?
imgreen на форуме  
Старый 11.09.2010, 00:41   #14
oso
кодер
 
Аватар для oso
 
Регистрация: 21.01.2008
Сообщений: 315
Бабло: $69585
По умолчанию

DOM деревья, по моему, тоже не всегда понятнее регулярок
а по скорости, особо без разницы, почти все время уходит на коннекты..
__________________
php скрипты от $25 Отзывы: 2013-2011, 2010, 2009. acя: 384 846 ноль два шесть
oso вне форума  
Старый 11.09.2010, 00:47   #15
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

Цитата:
Сообщение от imgreen Посмотреть сообщение
а смысл?
а мне так удобнее по дереву путешествовать, это я про случаи, когда не знаешь id элемента или нужны, например, все <p></p> внутри 5-ого <div> на странице - на xpath это одна строчка

Вообще xpath чем-то похож на регулярки - те же правила, только манипулируешь не на уровне символов, а на уровне объектов
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 11.09.2010, 04:06   #16
WebNinja
grablab.org
 
Аватар для WebNinja
 
Регистрация: 18.09.2007
Адрес: Thailand
Сообщений: 4,893
Бабло: $322264
Отправить сообщение для WebNinja с помощью ICQ Отправить сообщение для WebNinja с помощью Skype™
По умолчанию

дом устойчив к изменениям страницы, двоечники. прочитать текст сложно?
__________________
www.imscraping.ninja
grablab.org | blog
WebNinja вне форума  
Старый 11.09.2010, 04:18   #17
WebNinja
grablab.org
 
Аватар для WebNinja
 
Регистрация: 18.09.2007
Адрес: Thailand
Сообщений: 4,893
Бабло: $322264
Отправить сообщение для WebNinja с помощью ICQ Отправить сообщение для WebNinja с помощью Skype™
По умолчанию

Цитата:
Сообщение от Hector Посмотреть сообщение
регулярки юзаю) на скорость плевать
ага в вебе не критично )

часто быстрее регулярочку написать чем выйоубываться. но например на питоне есть http://www.crummy.com/software/BeautifulSoup/ ваще улет )

бывает если сложная хрень и высока вероятность ошибок. выделяешь строковыми функциями область (обычно див уникальный или ебучее нагромождение сраного яваскрипта) там соупом парсишь элементы оттуда уже циферки регуляркой. хуево канешно наверное с точки зрения кода, но это обычно редко нужно.
__________________
www.imscraping.ninja
grablab.org | blog
WebNinja вне форума  
Старый 11.09.2010, 08:26   #18
rushter
Senior Member
 
Регистрация: 28.11.2009
Сообщений: 1,800
Бабло: $299365
По умолчанию

Dom ломаный html не обработает.
Я кстати писал про Beautifulsoup, но он тормознутый.
http://rushter.com/2010/zapolnyaem-f...beautifulsoup/

Последний раз редактировалось rushter; 11.09.2010 в 08:41.
rushter вне форума  
Старый 11.09.2010, 15:17   #19
verdegal
Member
 
Регистрация: 15.08.2010
Сообщений: 30
Бабло: $5180
Отправить сообщение для verdegal с помощью ICQ Отправить сообщение для verdegal с помощью Skype™
По умолчанию

В python для работы с HTML удобно использовать lxml:
* парсинг невалидного html (lxml.html модуль)
* поддержка Xpath
* ElementTree API
* много других вкусностей типа того же парсинга/заполнения форм
verdegal вне форума  
Старый 11.09.2010, 19:59   #20
exolon
Юниор
 
Регистрация: 16.08.2010
Сообщений: 11
Бабло: $4480
По умолчанию

Цитата:
Сообщение от medar Посмотреть сообщение
Для php - мне недавно хвалили вот эту либу http://simplehtmldom.sourceforge.net/

Я же по старинке, регулярками.
Либа классная. Только у php с сбором мусора плохо. Где-то на тысяче файлов он у меня отжирал 2 гига ram и ниче не помогало.

А по теме - пара своих функций в которые завернуты текстовые функции и regexp. Написал на php и на python, чтобы все единообразно было.
exolon вне форума  
Старый 16.09.2010, 23:46   #21
sandy
Сеньор Член
 
Аватар для sandy
 
Регистрация: 11.04.2007
Адрес: The World
Сообщений: 1,125
Бабло: $107796
ТС -->
Отправить сообщение для sandy с помощью ICQ
автор темы ТС По умолчанию

Цитата:
Сообщение от chesser Посмотреть сообщение
так это наоборот самый быстрый и простой в работе способ, "строковый" не в счет в виду его убогости
А с домом бывают траблы: то html ему не валидный, то кодировка не та, да и памяти он жрет немеряно, попробуйте прогрузить html размером в 20 мегабайт

Использую оба способа, но чаще dom-xpath, т.к. он более высоко уровня как бы
для Джавы многие дом-парсеры умеют фиксить ошибки в хтмл. для других языков тоже самое думаю.
со строками функциями обычно можно обойтись получается вполне компактно и понятно, типа

PHP код:
redirUrl helper.parseFirst(code,"src=\"","\" "); 
sandy вне форума