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

More Related Content

Viewers also liked

Oleksandr Yefremov Continuously delivering mobile project
Oleksandr Yefremov Continuously delivering mobile projectOleksandr Yefremov Continuously delivering mobile project
Oleksandr Yefremov Continuously delivering mobile projectАліна Шепшелей
 
Anton Parkhomenko Boost your design workflow or git rebase for designers
Anton Parkhomenko Boost your design workflow or git rebase for designersAnton Parkhomenko Boost your design workflow or git rebase for designers
Anton Parkhomenko Boost your design workflow or git rebase for designersАліна Шепшелей
 
Миша Рыбачук Что такое дизайн?
Миша Рыбачук Что такое дизайн?Миша Рыбачук Что такое дизайн?
Миша Рыбачук Что такое дизайн?Аліна Шепшелей
 
Mihail Patalaha Aso: how to start and how to finish?
Mihail Patalaha Aso: how to start and how to finish?Mihail Patalaha Aso: how to start and how to finish?
Mihail Patalaha Aso: how to start and how to finish?Аліна Шепшелей
 
Anton Ivinskyi Application level metrics and performance tests
Anton Ivinskyi	Application level metrics and performance testsAnton Ivinskyi	Application level metrics and performance tests
Anton Ivinskyi Application level metrics and performance testsАліна Шепшелей
 
Volodymyr Getmanskyi How to build a dynamic pricing model using big data
Volodymyr Getmanskyi How to build a dynamic pricing model using big dataVolodymyr Getmanskyi How to build a dynamic pricing model using big data
Volodymyr Getmanskyi How to build a dynamic pricing model using big dataАліна Шепшелей
 
Roman Ugolnikov Migrationа and sourcecontrol for your db
Roman Ugolnikov Migrationа and sourcecontrol for your dbRoman Ugolnikov Migrationа and sourcecontrol for your db
Roman Ugolnikov Migrationа and sourcecontrol for your dbАліна Шепшелей
 
Kononenko Alina Designing for Apple Watch and Apple TV
Kononenko Alina Designing for Apple Watch and Apple TVKononenko Alina Designing for Apple Watch and Apple TV
Kononenko Alina Designing for Apple Watch and Apple TVАліна Шепшелей
 
Valerii Iakovenko Drones as the part of the present
Valerii Iakovenko	Drones as the part of the presentValerii Iakovenko	Drones as the part of the present
Valerii Iakovenko Drones as the part of the presentАліна Шепшелей
 
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...Аліна Шепшелей
 
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...Аліна Шепшелей
 
Gregory Shehet Undefined' on prod, or how to test a react app
Gregory Shehet Undefined' on  prod, or how to test a react appGregory Shehet Undefined' on  prod, or how to test a react app
Gregory Shehet Undefined' on prod, or how to test a react appАліна Шепшелей
 
Alexey Osipenko Basics of functional reactive programming
Alexey Osipenko Basics of functional reactive programmingAlexey Osipenko Basics of functional reactive programming
Alexey Osipenko Basics of functional reactive programmingАліна Шепшелей
 
Vladimir Lozanov How to deliver high quality apps to the app store
Vladimir Lozanov	How to deliver high quality apps to the app storeVladimir Lozanov	How to deliver high quality apps to the app store
Vladimir Lozanov How to deliver high quality apps to the app storeАліна Шепшелей
 
Alexander Voronov Test driven development in real world
Alexander Voronov Test driven development in real worldAlexander Voronov Test driven development in real world
Alexander Voronov Test driven development in real worldАліна Шепшелей
 
Andrew Veles Product design is about the process
Andrew Veles Product design is about the processAndrew Veles Product design is about the process
Andrew Veles Product design is about the processАліна Шепшелей
 

Viewers also liked (17)

Oleksandr Yefremov Continuously delivering mobile project
Oleksandr Yefremov Continuously delivering mobile projectOleksandr Yefremov Continuously delivering mobile project
Oleksandr Yefremov Continuously delivering mobile project
 
Anton Parkhomenko Boost your design workflow or git rebase for designers
Anton Parkhomenko Boost your design workflow or git rebase for designersAnton Parkhomenko Boost your design workflow or git rebase for designers
Anton Parkhomenko Boost your design workflow or git rebase for designers
 
Миша Рыбачук Что такое дизайн?
Миша Рыбачук Что такое дизайн?Миша Рыбачук Что такое дизайн?
Миша Рыбачук Что такое дизайн?
 
Mihail Patalaha Aso: how to start and how to finish?
Mihail Patalaha Aso: how to start and how to finish?Mihail Patalaha Aso: how to start and how to finish?
Mihail Patalaha Aso: how to start and how to finish?
 
Valerii Moisieienko Apache hbase workshop
Valerii Moisieienko	Apache hbase workshopValerii Moisieienko	Apache hbase workshop
Valerii Moisieienko Apache hbase workshop
 
Anton Ivinskyi Application level metrics and performance tests
Anton Ivinskyi	Application level metrics and performance testsAnton Ivinskyi	Application level metrics and performance tests
Anton Ivinskyi Application level metrics and performance tests
 
Volodymyr Getmanskyi How to build a dynamic pricing model using big data
Volodymyr Getmanskyi How to build a dynamic pricing model using big dataVolodymyr Getmanskyi How to build a dynamic pricing model using big data
Volodymyr Getmanskyi How to build a dynamic pricing model using big data
 
Roman Ugolnikov Migrationа and sourcecontrol for your db
Roman Ugolnikov Migrationа and sourcecontrol for your dbRoman Ugolnikov Migrationа and sourcecontrol for your db
Roman Ugolnikov Migrationа and sourcecontrol for your db
 
Kononenko Alina Designing for Apple Watch and Apple TV
Kononenko Alina Designing for Apple Watch and Apple TVKononenko Alina Designing for Apple Watch and Apple TV
Kononenko Alina Designing for Apple Watch and Apple TV
 
Valerii Iakovenko Drones as the part of the present
Valerii Iakovenko	Drones as the part of the presentValerii Iakovenko	Drones as the part of the present
Valerii Iakovenko Drones as the part of the present
 
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
 
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
 
Gregory Shehet Undefined' on prod, or how to test a react app
Gregory Shehet Undefined' on  prod, or how to test a react appGregory Shehet Undefined' on  prod, or how to test a react app
Gregory Shehet Undefined' on prod, or how to test a react app
 
Alexey Osipenko Basics of functional reactive programming
Alexey Osipenko Basics of functional reactive programmingAlexey Osipenko Basics of functional reactive programming
Alexey Osipenko Basics of functional reactive programming
 
Vladimir Lozanov How to deliver high quality apps to the app store
Vladimir Lozanov	How to deliver high quality apps to the app storeVladimir Lozanov	How to deliver high quality apps to the app store
Vladimir Lozanov How to deliver high quality apps to the app store
 
Alexander Voronov Test driven development in real world
Alexander Voronov Test driven development in real worldAlexander Voronov Test driven development in real world
Alexander Voronov Test driven development in real world
 
Andrew Veles Product design is about the process
Andrew Veles Product design is about the processAndrew Veles Product design is about the process
Andrew Veles Product design is about the process
 

Similar to Vladimir Mikhel Scrapping the web

Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressIgor Sazonov
 
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...Igor Sazonov
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10Technopark
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10Technopark
 
Алексей Андросов "Тотальная заморозка = быстрая загрузка"
Алексей Андросов "Тотальная заморозка = быстрая загрузка"Алексей Андросов "Тотальная заморозка = быстрая загрузка"
Алексей Андросов "Тотальная заморозка = быстрая загрузка"Yandex
 
Эволюция BackDoor.Flashback
Эволюция BackDoor.FlashbackЭволюция BackDoor.Flashback
Эволюция BackDoor.Flashbackhexminer
 
Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Yandex
 
создание тематических сдл порталов, их оптимизация и монетизация. артишук олег
создание тематических сдл порталов, их оптимизация и монетизация.   артишук олегсоздание тематических сдл порталов, их оптимизация и монетизация.   артишук олег
создание тематических сдл порталов, их оптимизация и монетизация. артишук олегOleg Artyshuk
 
Trening modul2-webinar12
Trening modul2-webinar12Trening modul2-webinar12
Trening modul2-webinar12olgaoov
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Ontico
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush
 
WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаMikhail Shcherbakov
 
Алексей Рылко, iProspect — «SEO-инсайды, которые вы можете достать из логов ...
Алексей Рылко, iProspect  — «SEO-инсайды, которые вы можете достать из логов ...Алексей Рылко, iProspect  — «SEO-инсайды, которые вы можете достать из логов ...
Алексей Рылко, iProspect — «SEO-инсайды, которые вы можете достать из логов ...shevchuk_conf
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Как избавиться от Google Panda
Как избавиться от Google PandaКак избавиться от Google Panda
Как избавиться от Google PandaSiteclinic
 
Как выйти из-под Google Panda. Симптомы, причины, кейсы.
Как выйти из-под Google Panda. Симптомы, причины, кейсы.Как выйти из-под Google Panda. Симптомы, причины, кейсы.
Как выйти из-под Google Panda. Симптомы, причины, кейсы.Евгений Аралов
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkGeorgy Turevich
 
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08Vladislav Morgun
 
Солянка seo хитростей для работы в арбитраже
Солянка seo хитростей для работы в арбитражеСолянка seo хитростей для работы в арбитраже
Солянка seo хитростей для работы в арбитражеNaZapad
 

Similar to Vladimir Mikhel Scrapping the web (20)

Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10
 
5 urok
5 urok5 urok
5 urok
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10
 
Алексей Андросов "Тотальная заморозка = быстрая загрузка"
Алексей Андросов "Тотальная заморозка = быстрая загрузка"Алексей Андросов "Тотальная заморозка = быстрая загрузка"
Алексей Андросов "Тотальная заморозка = быстрая загрузка"
 
Эволюция BackDoor.Flashback
Эволюция BackDoor.FlashbackЭволюция BackDoor.Flashback
Эволюция BackDoor.Flashback
 
Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"
 
создание тематических сдл порталов, их оптимизация и монетизация. артишук олег
создание тематических сдл порталов, их оптимизация и монетизация.   артишук олегсоздание тематических сдл порталов, их оптимизация и монетизация.   артишук олег
создание тематических сдл порталов, их оптимизация и монетизация. артишук олег
 
Trening modul2-webinar12
Trening modul2-webinar12Trening modul2-webinar12
Trening modul2-webinar12
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster
 
WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчика
 
Алексей Рылко, iProspect — «SEO-инсайды, которые вы можете достать из логов ...
Алексей Рылко, iProspect  — «SEO-инсайды, которые вы можете достать из логов ...Алексей Рылко, iProspect  — «SEO-инсайды, которые вы можете достать из логов ...
Алексей Рылко, iProspect — «SEO-инсайды, которые вы можете достать из логов ...
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Как избавиться от Google Panda
Как избавиться от Google PandaКак избавиться от Google Panda
Как избавиться от Google Panda
 
Как выйти из-под Google Panda. Симптомы, причины, кейсы.
Как выйти из-под Google Panda. Симптомы, причины, кейсы.Как выйти из-под Google Panda. Симптомы, причины, кейсы.
Как выйти из-под Google Panda. Симптомы, причины, кейсы.
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend Framework
 
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
 
Солянка seo хитростей для работы в арбитраже
Солянка seo хитростей для работы в арбитражеСолянка seo хитростей для работы в арбитраже
Солянка seo хитростей для работы в арбитраже
 

More from Аліна Шепшелей

More from Аліна Шепшелей (12)

Dmutro Panin JHipster
Dmutro Panin JHipster Dmutro Panin JHipster
Dmutro Panin JHipster
 
Alex Theedom Java ee revisits design patterns
Alex Theedom	Java ee revisits design patternsAlex Theedom	Java ee revisits design patterns
Alex Theedom Java ee revisits design patterns
 
Alexey Tokar To find a needle in a haystack
Alexey Tokar To find a needle in a haystackAlexey Tokar To find a needle in a haystack
Alexey Tokar To find a needle in a haystack
 
Maksym Antipov Hardware development as a hobby and a job
Maksym Antipov Hardware development as a hobby and a jobMaksym Antipov Hardware development as a hobby and a job
Maksym Antipov Hardware development as a hobby and a job
 
Ievgen Vladimirov Only cloud
Ievgen Vladimirov Only cloudIevgen Vladimirov Only cloud
Ievgen Vladimirov Only cloud
 
Denis Reznik Data driven future
Denis Reznik Data driven futureDenis Reznik Data driven future
Denis Reznik Data driven future
 
Den Golotyuk Big data from 30 million daily users
Den Golotyuk Big data from 30 million daily usersDen Golotyuk Big data from 30 million daily users
Den Golotyuk Big data from 30 million daily users
 
Anton Fedorchenko Swift for server side development
Anton Fedorchenko Swift for server side developmentAnton Fedorchenko Swift for server side development
Anton Fedorchenko Swift for server side development
 
Valerii Vasylkov Erlang. measurements and benefits.
Valerii Vasylkov Erlang. measurements and benefits.Valerii Vasylkov Erlang. measurements and benefits.
Valerii Vasylkov Erlang. measurements and benefits.
 
Ruslan Shevchenko Programming languages landscape: new &amp; old ideas
Ruslan Shevchenko Programming languages landscape:  new &amp; old ideasRuslan Shevchenko Programming languages landscape:  new &amp; old ideas
Ruslan Shevchenko Programming languages landscape: new &amp; old ideas
 
Oleg Gorbunov Action cable
Oleg Gorbunov Action cableOleg Gorbunov Action cable
Oleg Gorbunov Action cable
 
Kyryl Sablin Crdt and their uses
Kyryl Sablin Crdt and their usesKyryl Sablin Crdt and their uses
Kyryl Sablin Crdt and their uses
 

Vladimir Mikhel Scrapping the web