Одна из самых фундаментальных проблем при создании поисковой системы - это сбор контента, который вы хотите проиндексировать и сделать доступным для поиска. Веб-сайты сейчас настолько велики, что даже те, которые обслуживают относительно небольшую группу людей, могут иметь десятки миллионов страниц, что делает их сканирование недоступным для большинства из-за масштабов и ограничений по времени. Возьмем, к примеру, StackOverflow, который в первую очередь обслуживает программистов. На момент написания на сайте было более 30 миллионов страниц. Если бы мы проиндексировали Stack обычным поисковым роботом с приемлемой скоростью 2 запроса в секунду (rps), на очистку потребовалось бы почти 6 месяцев. Если мы хотим сократить время индексации до недели, скорость сканирования необходимо увеличить почти до 50 оборотов в секунду. И эти цифры даже не включают накладные расходы, с которыми сталкиваются сканеры, поскольку они обычно просматривают ряд страниц без содержания, таких как списки самых последних публикаций, сообщения в этой категории и т. Д. Посещение сайта со скоростью 50 оборотов в секунду в течение недели подряд будет обычно считается «оскорбительным» (и поисковый робот, вероятно, будет заблокирован), так что нам делать?

Есть несколько вариантов:

  • Дампы данных
  • API
  • Обычное сканирование

Дампы данных

К счастью, StackOverflow и несколько других сайтов предоставляют дампы данных или полные снимки (общедоступного) содержимого своих сайтов в файлах, которые легко анализировать. Они бывают всех форм и размеров, так как не существует единого стандарта их предоставления. StackOverflow предоставляет файлы XML в формате 7zip, в то время как Википедия предоставляет XML в формате bzip, другие предоставляют сжатый JSON и т. Д. очень легко и быстро создать инструменты для обработки этих дампов данных и извлечения всего необходимого. Для Stack это так же просто, как распаковать файлы 7zip и проанализировать XML на вашем любимом языке программирования. Доступны даже некоторые готовые библиотеки, например Https://github.com/kjk/stackoverflow.

В дополнение к дампам, предоставленным сайтами, есть также несколько сайтов, которые имеют дампы данных, созданные сообществом, где сами сайты не публикуют дампы, но другие пользователи могут реконструировать все содержимое сайта (обычно через API сайта, которые мы вскоре обсудим), и опубликуем его. Одним из самых известных из них является Pushshift, который предоставляет как исторические дампы, так и потоковую передачу сообщений и комментариев Reddit в режиме реального времени. Pushshift оказался чрезвычайно ценным для исследователей (https://scholar.google.com/scholar?cites=7671696188192149307), поскольку он дает исчерпывающее представление о том, что люди делают на одном из крупнейших сайтов, управляемых пользователями. интернет. Это довольно интересный набор данных для просмотра, и они даже предоставляют небольшую страницу, показывающую недавнюю статистику активности в Reddit: https://pushshift.io/. Существуют также аналогичные пользовательские проекты для GitHub и Hacker News, которые можно запрашивать и / или экспортировать через Google BigQuery.

Pushshift оказался чрезвычайно ценным для исследователей ...

API

API сайта также могут быть полезны. Хотя очень немногие сайты имеют доступные дампы данных, гораздо больше сайтов имеют общедоступные API, особенно с учетом тенденции последних лет иметь несколько интерфейсов (веб-сайт, собственные телефонные приложения и т. Д.) Поверх одних и тех же данных. Они часто хорошо документированы (или даже не требуют пояснений), обычно не регулируются / ограничиваются по скорости так сильно, иногда могут отвечать на массовые запросы (возвращая более одного элемента одновременно) и, что лучше всего, обычно предоставляют фактический контент. в легкодоступной форме, без искажений в HTML. Когда они доступны, их удобно очищать, а не вручную сканировать. Однако нельзя сказать, что у них нет собственных недостатков. Прежде всего, сайты разрабатывают свои собственные API-интерфейсы для своих нужд, а это означает, что любой, кто хочет использовать этот API, должен реализовать своего собственного клиента для каждого сайта, с которого они хотят получать данные.

Мы использовали эти и другие источники данных для создания нашей поисковой системы. Проверьте это на whize.co

Эти клиенты могут быть написаны относительно быстро, но они все еще работают. Во-вторых, в зависимости от того, для чего был создан API, он может не обеспечивать способ перебора всего контента на сайте. Нередко результаты API разбиваются на страницы, и, как часть этого, часто существуют верхние пределы (обычно в несколько тысяч) на количество страниц, которые вы можете перейти, прежде чем API либо молча прервется, либо отклонит ваши запросы. Наконец, общедоступные API-интерфейсы могут иметь требования к использованию, которые необходимо соблюдать, и в этих правилах иногда указывается, что их нельзя использовать для зеркалирования содержимого сайта, несмотря на то, что обычным сканерам разрешено очищать сайт.

Обычное сканирование

Наконец, есть Common Crawl. Обычное сканирование не является обычным дампом данных, а обеспечивает ограниченное, но полностью общедоступное сканирование Интернета почти каждый месяц. Каждый дамп содержит несколько миллиардов страниц, что, хотя это кажется большим количеством, обычно оставляет пробелы в индексе почти каждого используемого вами веб-сайта. Это делает его полезным для проведения очень широкого анализа сети, но не очень полезным для анализа отдельного сайта, где для достижения наилучших результатов требуется полная копия сайта.

Также стоит упомянуть, что обычное сканирование (и сканирование страниц в целом) имеет еще один, обычно менее рассматриваемый недостаток: контент на каждой просканированной странице необходимо извлекать. На каждой загружаемой странице содержится тонна постороннего контента (стили, сценарии, заголовки, заголовки и т. Д.), Который не является основным направлением страницы и определяет, какой текст является реальным. «Мясо» страницы нетривиально. Common Crawl предоставляет «WET» -файлы, которые извлекают весь текст на странице ‹body› (удаляя разметку стиля и сценарии), однако он оставляет много не основного содержимого, чередующегося в результатах, что может испортить любой анализ, выполняемый на странице страницы (например, заголовки меню, хлебные крошки и т. д.). Были предприняты некоторые попытки сделать сайты более описательными и упростить распознавание и извлечение их контента (например, HTML-теги ‹article›, ‹header›, ‹section› и ‹footer›), однако многие сайты по-прежнему не используйте их, и даже с этими тегами в них все равно могут быть нерелевантные фрагменты текста.

Небольшая просьба к владельцам сайтов

В конце концов, очень немногие сайты имеют доступные дампы данных, что делает невозможным «быстрый» анализ сайтов. В большинстве случаев операторы веб-сайтов рассматривают предоставление этих услуг как дополнительную работу с минимальной отдачей или без нее, при условии, что они даже рассматривают возможность их выпуска в первую очередь. У некоторых сайтов есть веские причины не предоставлять их (в первую очередь частный контент, слишком много контента и т. Д.), Однако подавляющее большинство сайтов могут предлагать дамп, но не надо.

Учитывая, что Common Crawl существует, очевидно, что есть желание, чтобы контент веб-сайта был легко доступен для анализа. Вместо того, чтобы всем приходилось дублировать работу при сканировании, мы хотели бы видеть увеличение количества сайтов, предлагающих дампы данных в той или иной форме, на благо всех, кто хочет провести собственное исследование или анализ. В частности, мы видим наибольшую ценность в свалках данных сайтов, которые хранят знания (вопросы и ответы, новости и т. Д.), Поскольку это, как правило, очень большие сайты со значительным потенциалом для использования в исследованиях. В общем, было бы несложно разработать подключаемые плагины для общих систем управления контентом (CMS) для автоматического предоставления дампов, что устраняет потенциальную боль с точки зрения операторов сайта, позволяя при этом создавать новые исследования и инструменты на основе содержание.

Спасибо, что прочитали, если вы нашли это интересным, вы можете перейти здесь и подписаться на нашу рассылку новостей. Раз в месяц вы будете получать подборку еще большего количества нашего интересного контента!