Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Scrapping the web
Грабим веб
Vladimir Mikhel Scrapping the web
Команда
Проблемы
- Мобильная версия сайта
- Мобильное приложение для ..
- Проиндексировать содержимое сайта (поиск)
- Приложение-читалка (Flipboard, ..)
- Мониторинг / аггрегация контента соцсетей по тегу / геотегу / группе /..
- Агрегация контента одной организации
- Собрать все товарные позиции в интернет магазине (Alibaba, ..)
- Сниппет страницы
SAAS
поиск для сайтов
Vladimir Mikhel Scrapping the web
Apache Solr DataImportHandler
jdbc/DIH
• -full-import
• -delta-import
Vladimir Mikhel Scrapping the web
к просмотру страниц
к продолжительности посещения
уменьшение
Интересные цифры
Vladimir Mikhel Scrapping the web
1 – вводим URL
сайта
2 – процесс краулинга ~20
секунд
3 – тестуруем выдачу
с картинками
+ код для вставки на
сайт
Нужен парсер!
Маска
Пример - маска для сбора данных из OG-тегов
Масок много
- System Masks – High Level level < 0.2f
- Custom Masks (Site / Domain) 0.2f <= level <0.4f
- System Masks – Low Level 0.4f <= level
Выходной документ JSON / базовые поля
_id,
_url,
_canonical,
_title,
_category, //category/rubric on site
_subCategory, // 1 level deeper
_siteName,
_image,
_imageGif,
_images(true),
_imagesGif(true),
_imagesTotal,
_description,
_descriptionRss,
_body,
_bodyPresentedHtml,
_bodyPresentedJson,
_bodyNe,
_bodyPresentedHtmlNe,
_bodyPresentedJsonNe,
_sumtext,
_base,
_authorName,
_authorUrl,
_types(true), //URL contexts
_tagsNavi(true), // site navigational tags
_tagsBody(true), // nouns and adjectives detected with standard postprocessor in body
_neBody(true),
_keywords(true), // mainly meta keywords
_language, // language 2letter
_tags(true), // sum of tag field with type prefixes
_datePublished,
_dateParsed,
_videoYoutube,
_videoVimeo,
_generator, // CMS provided
_cmsName, // CMS name in canonical form
_cmsVersion, // CMS version in canonical form
_robots(true),
_noindex
Постпроцессоры - их тоже много
ensureBodyRss (_descriptionRss)
htmlPresenterPostprocessor (_bodyPresentedJson/_bodyPresentedHtml)
htmlCleanerPostprocessor
ensureDocumentId (md5Hex(url))
ensureBody (_description)
ensureImages (относительный в абсолютный _image, _imageGif, _images,
_imagesGif)
ensureParsedDate
descriptionPresentedPostprocessor (540 символов || _bodyPresentedJson 260-270
символов)
imageGifPostprocessor(_image ->_imageGif /_images
->_imagesGif)
firstImagePresentedPostprocessor (_images[0] ->_image,
_imagesGif[0] -> _imageGif, _bodyPresentedJson[0 img] ->
_image)
taggerNePostprocessor (->_neBody)
myNewsTagImploderPostprocessor (_tags <- _types, _tagsNavi,
_neBody, _keywords, _language) (TagType (__siT, __siC, __kwd)
-> _tags)
docdresserPostprocessor (DocDresser tags -> _tags)
deduplicatorPostprocessor (!allowDuplicates)
imagePostProcessor - отправляет на закачку
imageCounterPresentedPostprocessor (_imagesTotal)
ПИВОТ
Новости Технологии Смешное
развлечения, новости, статьи,
видео
все лучшее в одном
приложении
Новостные
сайты
Глянец Галереи Видео гиф
Разные форматы
отображения
Инстаграм фиды Твиттер фиды
Нужен новый формат документа
PRESENTED JSON
За года появилось
новых формата
отображения контента
Нужно тегирование
FREEBASE тегирование
Deprecated - Google WTF?
● -пример словаря
● -пример документа с тегами
Отбрасываем категории топиков FREEBASE
● Оставляем топики <= 3 слова
● Оставляем RU, UA, EN
● Индексируем в Elastic Search
Пользователи требуют RSS
НУЖЕН “УМНЫЙ” ПАРСЕР
находить тело статьи и делать это хорошо
ШАГ 1 - Нахождение опорной точки в DOM
нечеткий поиск RSS / title – скриншот-пример
Плохие слова
ШАГ 2 - Нахождение граничных точек
сверху
снизу
внутри баннер читайте так
же
СКРИНШОТ выделенный кусок
граничного
Vladimir Mikhel Scrapping the web
ШАГ 3 – Оценка вариантов
● Плотность текста
● Содержит ноду с высокой плотностью
● Количество изображений
● Содержание видео эмбедов
● Является вероятным article контейнером
● Содержит вероятный article контейнер
● Глубина DOM блока
● Удаленность от опорной точки
Общая архитектура системы
Блок-схема
Синтаксис и демонстрация на тестовом стенде
Запуски скорость работы
Наше приложение открылось заоткрылось за
Vladimir Mikhel Scrapping the web
Планы на будущее
- МашинЛернинг нейросети над масками DOM
- конвертация форматов
Тут можно упомянуть конкурентные решения / че как
- ML над DOM
- ML над рендером - computer vision [diffbot]
- сторонние эвристические решения - Boilerpipe,
Сюрприз
Доступ к тестовому стенду http://..
Контакты

More Related Content

Vladimir Mikhel Scrapping the web