Какие методы можно использовать для обнаружения так называемых «черных дыр» (ловушки для пауков) при создании веб-сканера? - PullRequest
26 голосов
/ 22 декабря 2010

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

Пример:

Мы просим нашего сканера сканировать домен 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-адрес является новым для сканера, однако, похоже, что это только потому, что разработчик сделал «ловушку для петель» или «черную дыру». *

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

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

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

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

Ответы [ 8 ]

16 голосов
/ 29 декабря 2010

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

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

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

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

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

4 голосов
/ 14 апреля 2014

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

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

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

  • Просматривать другие веб-домены, выполнив первые два шага.

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

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

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

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

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

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

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

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

4 голосов
/ 30 декабря 2010

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

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

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

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

4 голосов
/ 22 декабря 2010

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

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

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

3 голосов
/ 22 декабря 2010

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

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

1 голос
/ 30 сентября 2013

А если вы MD5(the content of the URL)?

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

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

1 голос
/ 22 декабря 2010

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

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

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

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

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

Как домен.ком / страница / подстраниц / subsubpage / subsubsubpage / subsubsubsubpage / subsubsubsubsubpage / и т.д. / и т.д. / и т.д. / и т.д. / и т.д.

0 голосов
/ 15 ноября 2016

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...