Подтвердить что ты не робот

Какие методы могут быть использованы для обнаружения так называемых "черных дыр" (ловушка паука) при создании веб-искателя?

При создании веб-искателя вам необходимо создать систему, которая собирает ссылки и добавляет их в очередь. Некоторые, если не большинство, из этих ссылок будут динамическими, которые кажутся разными, но не добавляют никакого значения, поскольку они специально созданы для обмана сканеров.

Пример:

Мы сообщаем нашему сканеру обходить домен evil.com, введя начальный URL-адрес для поиска.

Предположим, что мы позволяем ему сначала сканировать первую страницу, evil.com/index

Возвращенный HTML будет содержать несколько "уникальных" ссылок:

  • evil.com/somePageOne
  • evil.com/somePageTwo
  • evil.com/somePageThree

Искатель добавит их в буфер нераскрытых URL.

При сканировании somePageOne искатель получает больше URL-адресов:

  • evil.com/someSubPageOne
  • evil.com/someSubPageTwo

Они кажутся уникальными, и поэтому они есть. Они уникальны в том смысле, что возвращаемый контент отличается от предыдущих страниц и что URL-адрес является новым для искателя, однако, похоже, это происходит только потому, что разработчик сделал "петлевую ловушку" или "черную дыру".

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

Эти ловушки цикла очень трудно найти, и если ваш искатель не имеет ничего, чтобы помешать им на месте, он будет застревать в определенном домене для бесконечности.

Мой вопрос: какие методы могут быть использованы для обнаружения так называемых черных дыр?

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

4b9b3361

Ответ 1

Ну, ты задал очень сложный вопрос. Существует много проблем:

Первый. Как вы думаете, кто-то сделает что-то подобное, чтобы предотвратить паутину? Сетевой паук может действовать как атака DoS, если она застряла в такой структуре.

Во-вторых,, если страница сделана для пользователей, как они будут реагировать на большое количество бессмысленных ссылок, связанных с случайными генерируемыми "мусорными сайтами"? Эти ссылки должны быть невидимыми для пользователя, либо некоторые из них, либо они будут скрыты каким-то образом - тогда вы должны проверить, есть ли ссылки: нет, 1 px шрифт и т.д.

Третий, как бы вести себя Google? Ну, google не индексирует все, что может. Он добавляет ссылки на очередь, но не следует за ними немедленно. Он не любит следовать ссылкам, на которые ссылаются ссылки, которые не связаны с ранее проиндексированными страницами. Это заставляет его не индексировать все, но индексирует, что пользователи, скорее всего, будут посещать, наконец-то посещают. В противном случае такие страницы, которые вы описываете, будут экстремально часто использоваться спамерами SEO;)

Я бы построил очередь приоритетов. Каждая ссылка на каждый URL добавляет 1-точечный приоритет (больше, когда на главной странице). Страницы с приоритетом 1 находятся в конце списка. Я бы ограничил количество посещенных страниц, поэтому в худшем случае я бы посмотрел на наиболее важные страницы. Я был бы подозрительным на страницах, содержащих слишком много ссылок со слишком маленьким контентом. Короче говоря, имитируйте поведение Google настолько, насколько это необходимо.

Ответ 2

В лучшем случае любое эвристическое решение будет эвристическим, так что вам придется довольствоваться менее совершенными результатами. Я бы подумал, что подход с лимитом страницы будет работать очень хорошо, если будет реализован должным образом.

Вы можете ограничить количество страниц, которые будут обходить, не покидая домен; это не мешает индексированию всех страниц, так как если паук задерживается до достижения определенной страницы, вероятно, будет больше путей к этой странице, которые войдут в домен "ближе" к нему, что позволит ему достичь перед отключением.

Помните также, что без такого ограничения паук мог застрять на законном сайте, таком как Wikipedia, в течение очень долгого времени, просто из-за огромного количества контента.

Ответ 3

Если вы строили крупномасштабный веб-искатель, было бы целесообразно использовать следующий подход:

  • Сначала сканируйте ссылки, явно упомянутые в файлах sitemap.xml или файлах карты сайта, указанных в site map index file. Поскольку ожидается, что a sitemap.xml не будет иметь более 50 000 URL-адресов, и ожидается, что индекс карты сайта будет содержать не более 1000 индексных файлов, было бы разумным ожидать, что если вы сначала сканируете эти ссылки, у вас будет разумный индекс содержимого сайтов. Так как имеет смысл поставить более важные URL-адреса на карте сайта. Это может быть до 50 миллионов URL! Это много, я не уверен, что будет много сайтов с более чем 50 миллионами URL-адресов. Википедия утверждает, что их активные счетчики составляют 32 663 401 страниц. Поэтому, если вы будете следовать этой схеме, вы можете, по крайней мере, обходить википедию, которая является достижением (так как это займет некоторое время). Обратите внимание, что эта тактика поможет вам обходить только сайты, которые фактически создали карту сайта, но более вероятно, что на полезном веб-сайте будет карта сайта!, в отличие от той, которая этого не делает.

  • Следующим шагом может стать составление списка URL-адресов, которые не упоминаются на карте сайта (мы можем определить приоритеты для сканирования позже)

  • Сканирование других веб-доменов после первых двух шагов.

  • Как только вы закончите веб-домены для обхода (если у вас закончились обходные области для обхода, это вполне достижимо!), тогда вы можете начинать ранжирование страниц по всем URL-адресам, включая те, t сканирование еще (с шага 2!)

  • Скорее всего, URL-адреса с шага 2 являются действительными URL-адресами, если к ним привязаны другие внешние домены с высоким рангом страницы. Поэтому вы можете определить, какие URL-адреса для сканирования. Если никакие внешние домены не связаны с URL-адресами с шага 2, то более вероятно, что контент либо не так полезен для людей, которые посетили страницу, либо никто не посетил страницу, или это ловушка для пауков. Теперь возможно, что URL-адрес, который не имеет внешних ссылок, ссылающихся на него, не имеет ссылок на него, потому что он никогда не был проиндексирован раньше, и никто не знает, что он существует. Возможно, стоит проиндексировать эту страницу, но по мере того, как вы идете "глубже вниз", страницы, на которые она ссылается, должны рассматриваться с меньшей значимостью.

  • Еще один полезный трюк (но гораздо более сложный) - проверить, читаются ли текст/URL-адреса на странице. Некоторые сайты пытаются скрыть текст /URL, сделав их того же цвета, что и фон, чтобы они не были сразу видны людям, но могут использоваться для обмана машин. Аналогично, некоторый контент можно скрыть с помощью CSS. Они должны быть обнаружены вашим искателем/индексированным, чтобы опустить оценку конкретной страницы и придать ему меньшее значение при определении того, какой URL-адрес сканировать дальше.

  • Наконец, как только сканирование завершено, вам нужно начать следующий цикл обхода и повторить описанный выше процесс! На этот раз, если вы найдете внешние домены, ссылающиеся на URL-адреса с шага 2, рейтинг его страницы растет! И теперь вы можете глубже сверлить! Таким образом, вы должны иметь достаточно хороший индекс для более общего содержимого и избегать ловушек пауков.

Еще один шаг, о котором я не упомянул, - "Обработка/индексирование обхода содержимого". Это действительно большой шаг, но поскольку ваш вопрос скорее связан с обходом, а не с построением полноценной системы поиска информации, я не упоминал об этом раньше.

Самый законный контент, как правило, имеет смысл с точки зрения естественного языка. Например, человек, который читает страницу, может сразу сказать, является ли страница просто набором случайных слов, нанизанных вместе, или является ли это реальным содержанием, которое пытается выразить идею. При обработке данных с "известных" легитимных сайтов можно создать набор правил и эвристик о том, как должен выглядеть конкретный язык. Это можно использовать, чтобы сообщить об этом вашему веб-искателю, если конкретная ссылка содержит тарабарщину или реальный контент. Это можно использовать для оценки URL-адреса и определения того, насколько важно следовать.

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

Третья проблема - это страницы, которые динамически создаются с использованием законного контента с других сайтов. Это более сложная проблема, но опять же, вы можете уделять меньше внимания этим, используя ранжирование страницы. Если вы действительно можете создать масштабируемую систему, которая может сканировать все URL-адреса, упомянутые на картах сайтов каждого домена в Интернете, что это довольно важное достижение, а также означает, что вы очень богаты и мощны, поскольку у вас, вероятно, есть тысячи компьютеров на вашем удаление. Будучи таким богатым парнем, вы, вероятно, должны сосредоточиться на более важных вещах, и ваши инженеры оценивают это. XD

Ответ 4

Контент - это разница между черной дырой и законным сайтом, например Википедия. Хотя WP действительно является огромным веб-сайтом, каждый URL содержит килобайты законных данных. Ловушка паука может быть в равной степени "большой", но страницы не будут содержать ничего: она совершенно извращает отбрасывание ресурсов сервера и пропускной способности, генерирующих значительные количества данных тарабарщины просто для привязки веб-искателя.

Вместо того, чтобы устанавливать верхние пределы ширины или глубины дерева URL-адресов сайта (которые будут ловить сайты, богатые контентом, например WP), возможно, отслеживать количество отсканированных страниц, которые ниже некоторого уровня "полезного размера". Затем вы можете вытащить дескриптор выброса на ваш паук после того, как счетчик превысит допустимый предел.

Ответ 5

Я не думаю, что есть решение обнаружить черные дыры, так как существует множество причин, по которым сайт может создать бесконечное количество страниц по уважительной причине, и было бы сложно сказать что-либо о содержании такого сайта. По этой причине я предлагаю смену подхода, которая не позволяет паукам рыться на неопределенный срок:

Я думаю, было бы лучше разработать стратегию, в которой каждой странице присваивается значение рейтинга страницы. У ссылок тоже есть назначенное значение, все идентичные ссылки затем создают окончательный целевой рейтинг (потенциальный доход при поиске на странице).

Пауку следует разрешить сканирование в течение определенного периода времени, как определено потенциальным возвратом. Теперь пауки отбрасываются, данные шахт и поднимаются и перемещаются там, где это требуется.

Таким образом, сервер не будет располагать пауками в поисках страниц на неопределенный срок, поскольку они непрерывно перенаправляются туда, где это требование является самым высоким.

Ответ 6

Возможно, вы можете добавить ограничение длины URL для обхода.

Также большинство веб-серверов имеют ограничение на длину URL-адреса. Поэтому вы не должны бесконечно зацикливаться.

Нашел документ по этому вопросу. Не знаю, все ли это up2date.

Проверьте это: http://www.boutell.com/newfaq/misc/urllength.html

Также вы можете ограничить "глубину" страниц.

Подобно domain.com/page/subpage/subsubpage/subsubsububs/subsubsubsubpage/subsubsubsubsubpage/etc/etc/etc/etc/etc

Ответ 7

Как насчет MD5(the content of the URL)?

Я знаю, что это не самое деликатное решение, но вы можете обнаружить некоторый дублированный контент. Вам нужно создать уникальное поле md5 (в БД или подобное) и проверить каждый URL-адрес этого поля.

Если страница имеет что-то другое в каждом запросе (т.е. временная метка), это решение не будет работать.

Ответ 8

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

Целью черной дыры является обнаружение роботов, которые не могут/не хотят уважать файл /robots.txt(если он существует) или rel= "nofollow" атрибуты в ссылках. Такие роботы обычно используются для очистки адресов электронной почты и другой информации с целью рассылки спама или продажи этих данных спамерам.

Связи с черными дырами обычно скрыты, поэтому обычные пользователи случайно не попадают в ловушку. Они также не являются проблемой для Google, Bing и т.д., Потому что они делают то, что попросил их владелец сайта (я уважаю владельцев robots.txt). Единственные люди, которые попадают в ловушку, - это те, которые не дают ^ & @и плохо разработанные сканеры.