SlideShare a Scribd company logo
Scrapping the web
Грабим веб
SE2016 Java Vladimir Mikhel "Scrapping the web"
Команда
Проблемы
- Мобильная версия сайта
- Мобильное приложение для ..
- Проиндексировать содержимое сайта (поиск)
- Приложение-читалка (Flipboard, ..)
- Мониторинг / аггрегация контента соцсетей по тегу / геотегу / группе /..
- Агрегация контента одной организации
- Собрать все товарные позиции в интернет магазине (Alibaba, ..)
- Сниппет страницы
SAAS
поиск для сайтов
SE2016 Java Vladimir Mikhel "Scrapping the web"
Apache Solr DataImportHandler
jdbc/DIH
• -full-import
• -delta-import
SE2016 Java Vladimir Mikhel "Scrapping the web"
к просмотру страниц
к продолжительности посещения
уменьшение
Интересные цифры
SE2016 Java 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 - Нахождение граничных точек
сверху
снизу
внутри баннер читайте так
же
СКРИНШОТ выделенный кусок
граничного
SE2016 Java Vladimir Mikhel "Scrapping the web"
ШАГ 3 – Оценка вариантов
● Плотность текста
● Содержит ноду с высокой плотностью
● Количество изображений
● Содержание видео эмбедов
● Является вероятным article контейнером
● Содержит вероятный article контейнер
● Глубина DOM блока
● Удаленность от опорной точки
Общая архитектура системы
Блок-схема
Синтаксис и демонстрация на тестовом стенде
Запуски скорость работы
Наше приложение открылось заоткрылось за
SE2016 Java Vladimir Mikhel "Scrapping the web"
Планы на будущее
- МашинЛернинг нейросети над масками DOM
- конвертация форматов
Тут можно упомянуть конкурентные решения / че как
- ML над DOM
- ML над рендером - computer vision [diffbot]
- сторонние эвристические решения - Boilerpipe,
Сюрприз
Доступ к тестовому стенду http://..
Контакты

More Related Content

PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PDF
"Jaggery.js — сладкие корпоративные решения", Александр Новиков, MoscowJS 15
PDF
Jsfwdays 2013-2
PPTX
А не поговорить ли нам о XSS!
PPTX
jQuery. Введение и практика
PDF
Flask, rest and data
PPT
10wayjava
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
"Jaggery.js — сладкие корпоративные решения", Александр Новиков, MoscowJS 15
Jsfwdays 2013-2
А не поговорить ли нам о XSS!
jQuery. Введение и практика
Flask, rest and data
10wayjava

Viewers also liked (14)

PPT
PPT
PPT
Javabeans
PPT
PPT
Javabeginners
PPT
Concurency
PPTX
Seminario 7-final
PPT
Java c (1)
PPTX
Career development
PDF
SE2016 BigData Den Golotyuk "Big Data from 30 million daily users"
PDF
Black Soap for Acne
PPT
Java swing
PPT
Java android
Javabeans
Javabeginners
Concurency
Seminario 7-final
Java c (1)
Career development
SE2016 BigData Den Golotyuk "Big Data from 30 million daily users"
Black Soap for Acne
Java swing
Java android
Ad

Similar to SE2016 Java Vladimir Mikhel "Scrapping the web" (19)

PDF
М. Коробов "Машинное обучение на фронте и в тылу", DUMP-2014
PPTX
Инструментарий интернет-журналиста: платформы, "хард" и "софт". Основы HTML. ...
PPTX
How Browser works?
PDF
Павел Юрийчук - Разработка приложений под мобильные браузеры
PDF
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
PDF
Polymer - New Era of Web Development
PDF
Изоморфный JavaScript — будущее уже здесь
PPTX
Структура html документа
PDF
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
PPTX
Разработка Rich Text Editor: проблемы и решения / Егор Яковишен (Setka)
PPTX
Парсер: что? зачем? как?
PPT
презентация по миру
PPTX
HTML
PDF
Владислав Моргун
PDF
Основы языка HTML
PDF
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
PDF
Frontera обход испанского интернета
PDF
Олег Мохов: Модель Отображения. Браузеры
М. Коробов "Машинное обучение на фронте и в тылу", DUMP-2014
Инструментарий интернет-журналиста: платформы, "хард" и "софт". Основы HTML. ...
How Browser works?
Павел Юрийчук - Разработка приложений под мобильные браузеры
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Polymer - New Era of Web Development
Изоморфный JavaScript — будущее уже здесь
Структура html документа
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Разработка Rich Text Editor: проблемы и решения / Егор Яковишен (Setka)
Парсер: что? зачем? как?
презентация по миру
HTML
Владислав Моргун
Основы языка HTML
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera обход испанского интернета
Олег Мохов: Модель Отображения. Браузеры
Ad

More from Inhacking (20)

PDF
SE2016 Fundraising Roman Kravchenko "Investment in Ukrainian IoT-Startups"
PDF
SE2016 Fundraising Wlodek Laskowski "Insider guide to successful fundraising ...
PDF
SE2016 Fundraising Andrey Sobol "Blockchain Crowdfunding or "Mommy, look, I l...
PDF
SE2016 Company Development Valentin Dombrovsky "Travel startups challenges an...
PDF
SE2016 Company Development Vadym Gorenko "How to pass the death valley"
PDF
SE2016 Marketing&PR Jan Keil "Do the right thing marketing for startups"
PDF
SE2016 PR&Marketing Mikhail Patalakha "ASO how to start and how to finish"
PDF
SE2016 UI/UX Alina Kononenko "Designing for Apple Watch and Apple TV"
PDF
SE2016 Management Mikhail Lebedinkiy "iAIST the first pure ukrainian corporat...
PDF
SE2016 Management Anna Lavrova "Gladiator in the suit crisis is our brand!"
PDF
SE2016 Management Aleksey Solntsev "Management of the projects in the conditi...
PDF
SE2016 Management Vitalii Laptenok "Processes and planning for a product comp...
PDF
SE2016 Management Yana Prolis "Please don't burn down!"
PDF
SE2016 Management Marina Bril "Management at marketing teams and performance"
PDF
SE2016 iOS Anton Fedorchenko "Swift for Server-side Development"
PDF
SE2016 iOS Alexander Voronov "Test driven development in real world"
PDF
SE2016 JS Gregory Shehet "Undefined on prod, or how to test a react application"
PDF
SE2016 JS Alexey Osipenko "Basics of functional reactive programming"
PDF
SE2016 Java Valerii Moisieienko "Apache HBase Workshop"
PDF
SE2016 Java Roman Ugolnikov "Migration and source control for your DB"
SE2016 Fundraising Roman Kravchenko "Investment in Ukrainian IoT-Startups"
SE2016 Fundraising Wlodek Laskowski "Insider guide to successful fundraising ...
SE2016 Fundraising Andrey Sobol "Blockchain Crowdfunding or "Mommy, look, I l...
SE2016 Company Development Valentin Dombrovsky "Travel startups challenges an...
SE2016 Company Development Vadym Gorenko "How to pass the death valley"
SE2016 Marketing&PR Jan Keil "Do the right thing marketing for startups"
SE2016 PR&Marketing Mikhail Patalakha "ASO how to start and how to finish"
SE2016 UI/UX Alina Kononenko "Designing for Apple Watch and Apple TV"
SE2016 Management Mikhail Lebedinkiy "iAIST the first pure ukrainian corporat...
SE2016 Management Anna Lavrova "Gladiator in the suit crisis is our brand!"
SE2016 Management Aleksey Solntsev "Management of the projects in the conditi...
SE2016 Management Vitalii Laptenok "Processes and planning for a product comp...
SE2016 Management Yana Prolis "Please don't burn down!"
SE2016 Management Marina Bril "Management at marketing teams and performance"
SE2016 iOS Anton Fedorchenko "Swift for Server-side Development"
SE2016 iOS Alexander Voronov "Test driven development in real world"
SE2016 JS Gregory Shehet "Undefined on prod, or how to test a react application"
SE2016 JS Alexey Osipenko "Basics of functional reactive programming"
SE2016 Java Valerii Moisieienko "Apache HBase Workshop"
SE2016 Java Roman Ugolnikov "Migration and source control for your DB"

SE2016 Java Vladimir Mikhel "Scrapping the web"