Top Banner
Scrapping the web Грабим веб
42

SE2016 Java Vladimir Mikhel "Scrapping the web"

Feb 17, 2017

Download

Software

Inhacking
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: SE2016 Java Vladimir Mikhel "Scrapping the web"

Scrapping the web

Грабим веб

Page 2: SE2016 Java Vladimir Mikhel "Scrapping the web"
Page 3: SE2016 Java Vladimir Mikhel "Scrapping the web"

Команда

Page 4: SE2016 Java Vladimir Mikhel "Scrapping the web"

Проблемы- Мобильная версия сайта

- Мобильное приложение для ..

- Проиндексировать содержимое сайта (поиск)

- Приложение-читалка (Flipboard, ..)

- Мониторинг / аггрегация контента соцсетей по тегу / геотегу / группе /..

- Агрегация контента одной организации

- Собрать все товарные позиции в интернет магазине (Alibaba, ..)

- Сниппет страницы

Page 5: SE2016 Java Vladimir Mikhel "Scrapping the web"

SAAS

поиск для сайтов

Page 6: SE2016 Java Vladimir Mikhel "Scrapping the web"
Page 7: SE2016 Java Vladimir Mikhel "Scrapping the web"

Apache Solr DataImportHandler

jdbc/DIH

• -full-import

• -delta-import

Page 8: SE2016 Java Vladimir Mikhel "Scrapping the web"
Page 9: SE2016 Java Vladimir Mikhel "Scrapping the web"

к просмотру страницк продолжительности посещенияуменьшение

Интересные цифры

Page 10: SE2016 Java Vladimir Mikhel "Scrapping the web"
Page 11: SE2016 Java Vladimir Mikhel "Scrapping the web"

1 – вводим URL сайта

2 – процесс краулинга ~20 секунд

3 – тестуруем выдачус картинками

+ код для вставки на сайт

Page 12: SE2016 Java Vladimir Mikhel "Scrapping the web"

Нужен парсер!

Page 13: SE2016 Java Vladimir Mikhel "Scrapping the web"

Маска

Page 14: SE2016 Java Vladimir Mikhel "Scrapping the web"

Пример - маска для сбора данных из OG-тегов

Page 15: SE2016 Java Vladimir Mikhel "Scrapping the web"

Масок много

- System Masks – High Level level < 0.2f

- Custom Masks (Site / Domain) 0.2f <= level <0.4f

- System Masks – Low Level 0.4f <= level

Page 16: SE2016 Java Vladimir Mikhel "Scrapping the web"

Выходной документ 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

Page 17: SE2016 Java Vladimir Mikhel "Scrapping the web"

Постпроцессоры - их тоже много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)

Page 18: SE2016 Java Vladimir Mikhel "Scrapping the web"

ПИВОТ

Page 19: SE2016 Java Vladimir Mikhel "Scrapping the web"

Новости Технологии Смешное

развлечения, новости, статьи, видео

все лучшее в одномприложении

Page 20: SE2016 Java Vladimir Mikhel "Scrapping the web"

Новостныесайты

Глянец Галереи Видео гиф

Разные форматыотображения

Page 21: SE2016 Java Vladimir Mikhel "Scrapping the web"

Инстаграм фиды Твиттер фиды

Page 22: SE2016 Java Vladimir Mikhel "Scrapping the web"

Нужен новый формат документа

Page 23: SE2016 Java Vladimir Mikhel "Scrapping the web"

PRESENTED JSON

Page 25: SE2016 Java Vladimir Mikhel "Scrapping the web"

Нужно тегирование

Page 26: SE2016 Java Vladimir Mikhel "Scrapping the web"

FREEBASE тегированиеDeprecated - Google WTF?

Page 27: SE2016 Java Vladimir Mikhel "Scrapping the web"

● -пример словаря

● -пример документа с тегами

Page 28: SE2016 Java Vladimir Mikhel "Scrapping the web"

Отбрасываем категории топиков FREEBASE● Оставляем топики <= 3 слова

● Оставляем RU, UA, EN

● Индексируем в Elastic Search

Page 29: SE2016 Java Vladimir Mikhel "Scrapping the web"

Пользователи требуют RSS

Page 30: SE2016 Java Vladimir Mikhel "Scrapping the web"

НУЖЕН “УМНЫЙ” ПАРСЕРнаходить тело статьи и делать это хорошо

Page 31: SE2016 Java Vladimir Mikhel "Scrapping the web"

ШАГ 1 - Нахождение опорной точки в DOM

нечеткий поиск RSS / title – скриншот-пример

Page 32: SE2016 Java Vladimir Mikhel "Scrapping the web"

Плохие слова

Page 33: SE2016 Java Vladimir Mikhel "Scrapping the web"

ШАГ 2 - Нахождение граничных точек

сверхуснизувнутри баннер читайте так

же

СКРИНШОТ выделенный кусокграничного

Page 34: SE2016 Java Vladimir Mikhel "Scrapping the web"
Page 35: SE2016 Java Vladimir Mikhel "Scrapping the web"

ШАГ 3 – Оценка вариантов

● Плотность текста

● Содержит ноду с высокой плотностью

● Количество изображений

● Содержание видео эмбедов

● Является вероятным article контейнером

● Содержит вероятный article контейнер

● Глубина DOM блока

● Удаленность от опорной точки

Page 36: SE2016 Java Vladimir Mikhel "Scrapping the web"

Общая архитектура системыБлок-схема

Page 37: SE2016 Java Vladimir Mikhel "Scrapping the web"

Синтаксис и демонстрация на тестовом стенде

Page 38: SE2016 Java Vladimir Mikhel "Scrapping the web"

Запуски скорость работы

Наше приложение открылось заоткрылось за

Page 40: SE2016 Java Vladimir Mikhel "Scrapping the web"

Планы на будущее- МашинЛернинг нейросети над масками DOM

- конвертация форматов

Тут можно упомянуть конкурентные решения / че как

- ML над DOM

- ML над рендером - computer vision [diffbot]

- сторонние эвристические решения - Boilerpipe,

Page 41: SE2016 Java Vladimir Mikhel "Scrapping the web"

СюрпризДоступ к тестовому стенду http://..

Page 42: SE2016 Java Vladimir Mikhel "Scrapping the web"

Контакты