Как быть хорошим гражданином при сканировании веб-сайтов?

83

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

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

Некоторые примеры, которые я могу придумать, которые могут иметь или не иметь значение:

  • Количество параллельных запросов
  • Время между запросами
  • Время между полными обходами
  • Избегание потенциально разрушительных ссылок (не хочу быть Пауком Судьбы - но кто знает, практично ли это)

Это действительно просто плевок; есть ли проверенная и проверенная мудрость, которая широко применима к любому, кто намеревается написать или использовать паука?

Aaronaught
источник
1
Хотя ответы ниже дают отличный ответ о том, как с уважением сканировать контент, имейте в виду, допустимое использование указанного контента после его сканирования. Повторная публикация, полностью или частично, может являться нарушением авторских прав владельцев.
Гэвин Коутс

Ответы:

85

Кроме того , повинуясь robots.txt, подчиняться nofollowи noindexв <meta>элементах и ссылки:

  • Многие считают, что robots.txt не является правильным способом блокировки индексации, и из-за этой точки зрения многие владельцы сайтов указали <meta name="robots" content="noindex">тегу, чтобы веб-сканеры не индексировали страницу.

  • Если вы пытаетесь построить график связей между веб-сайтами (что-то похожее на PageRank), <meta name="robots" content="nofollow">) должно означать, что исходный сайт недостаточно доверяет целевому сайту, чтобы дать ему надлежащую поддержку. Таким образом, хотя вы можете индексировать целевой сайт, вы не должны хранить отношения между двумя сайтами.

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

Из-за этого человеческого фактора, если вы не являетесь Google, Microsoft или Yahoo !, вы считаете себя злым, если не доказано иное. Вы должны проявить особую осторожность, чтобы действовать так, как будто вы не представляете угрозы для владельца веб-сайта, и действовать в соответствии с тем, как вы хотели бы, чтобы потенциально вредоносный (но, надеюсь, доброкачественный) сканер действовал:

  • прекратить сканирование сайта, как только вы обнаружите, что вас заблокировали: 403/401 на страницах, которые вы знаете, работают, ограничены, превышены тайм-ауты и т. д.
  • Избегайте исчерпывающего сканирования в относительно короткие периоды времени: просканируйте часть сайта и вернитесь позже (несколько дней спустя), чтобы сканировать другую часть. Не делайте параллельных запросов.
  • избегайте сканирования потенциально уязвимых областей: например, URL-адресов, содержащихся /admin/в них.

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

Единственное, что вы можете сделать для борьбы с негативным изображением, которое будет иметь неизвестный сканер, - это указать в строке user-agent, кто вы:

Aarobot Crawler 0.9 created by John Doe. See http://example.com/aarobot.html for more information.

Где http://example.com/aarobot.htmlобъясняет, чего ты пытаешься достичь и почему ты не угроза. На этой странице должно быть несколько вещей:

  • Информация о том, как связаться с вами напрямую
  • Информация о том, что собирает сканер и почему его собирает
  • Информация о том, как отказаться и удалить все собранные данные

Последний из них является ключевым: хороший отказ подобен гарантии возврата денег ™ и приносит необоснованное количество гудвилла. Это должно быть гуманно: один простой шаг (либо адрес электронной почты, либо, в идеале, форма), и всеобъемлющий (не должно быть никаких "ошибок": отказ от участия означает прекращение сканирования без исключения).


источник
18
Огромное +1 за предложение поставить ясную информацию в User-Agent. У меня была работа по просмотру логов веб-сервера, чтобы выяснить, кто спайдеринг на большом сайте, и мне неинтересно пытаться отследить, кто управляет всеми непонятными пауками.
Carson63000
4
Распространено указывать URL в форме (+http://example.com/aarobot.html). Я не знаю, какова цель +знака здесь, но я видел это часто. Web-Sniffer делает это, как и многие другие.
TRIG
Это отличная информация, но меня смущает одна вещь: вы упоминаете, rel="noindex"как будто это <a>атрибут, но страница, на которую вы ссылаетесь, описывает его как часть атрибута <meta>тега content. Это и то и другое, или это была опечатка в ответе?
Аарона
1
«SEO - это больше искусство, чем настоящая наука» - неправда. Если вы программист-статистик, SEO - это не искусство, а навык математического распознавания. Математические выпускники, имеющие навыки программирования или программисты, имеющие навыки математики, пользуются хорошим спросом в индустрии профилирования веб-данных.
שינתיא אבישגנת
32

Хотя это не отвечает на все ваши вопросы, я считаю, что это поможет вам и сайтам, которые вы сканируете.

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

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

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

  • удалять
  • Удалить
  • Обновить
  • редактировать
  • изменять

Не дурак, но иногда вы просто не можете помешать людям учиться трудным путем;)

Дэн МакГрат
источник
3
Хороший совет по поводу «делиться любовью» - совсем не учел этого, хотя, конечно, это кажется очевидным в ретроспективе.
Аарона
Ваш ответ будет почти идеальным, если вы упомянете robots.txt;)
deadalnix
7
@deadalnix, но robots.txtуже упоминается в вопросе, и можно предположить, что.
TRIG
20

Мой единственный совет - слушать, что говорит вам сайт, который вы сканируете, и динамически изменять свое сканирование в ответ на это.

  • Сайт работает медленно? Ползайте медленнее, чтобы не допускать DDOS. Это быстро? Ползти немного больше, тогда!

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

  • Получать много 404-х? (помните, что наши модные 404 страницы также требуют серверного времени!) Старайтесь пока не сканировать дополнительные URL-адреса с этим путем, поскольку, возможно, все, чего там не хватает; если file001.html- file005.htmlнет, спорим, доллары к пончикам file999.htmlтоже нет! Или, возможно, уменьшите процент времени, когда вы что-то извлекаете на этом пути.

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

Умный сканер реагирует на целевой сайт (сайты), к которому он относится.

Джефф Этвуд
источник
19

Другие упоминали некоторые мантры, но позвольте мне добавить некоторые.

Обратите внимание на тип и размер файла. Не тяните эти огромные двоичные файлы.

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

Попросите gzip (сжатие на лету), когда это возможно.

Ограничить глубину или обнаружить рекурсию (или оба).

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

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

Это может быть сложно, но попробуйте обнаружить фермы с балансировкой нагрузки. Если v329.host.com/pages/article.php?99999 возвращает то же, что и v132.host.com/pages/article.php?99999, не очищайте полный список серверов от v001.host.com до v999. host.com

Научная фантастика
источник
Важные угловые случаи!
М. Дадли
В настоящее время вы можете часто обнаруживать намеренно дублирующийся контент (например, фермы с балансировкой нагрузки), проверяя канонические теги.
Брайан
4

Я просто добавлю одну маленькую вещь.

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

Это, конечно, зависит от того, какие данные страны вы храните (и где вы их храните). Показательный пример - проблемы с Патриотическим актом США против Директивы ЕС о защите данных. Краткое изложение проблемы заключается в том, что американские компании должны предоставлять свои данные, например. по запросу ФБР, без информирования пользователей об этом, где в Директиве о защите данных говорится, что пользователи должны быть проинформированы об этом. Se http://www.itworld.com/government/179977/eu-upset-microsoft-warning-about-us-access-eu-cloud

Holger
источник
2
«Я знаю, что вы пишете, что они являются общедоступными веб-сайтами, поэтому авторские права могут отсутствовать». Каждый веб-сайт в Интернете является общедоступным, и каждый веб-сайт защищен авторским правом, если прямо не указано иное.
Гэвин Коутс
3

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

Я видел, как это делается через заголовок запроса User-Agent.

jcolebrand
источник
Я думал, что это обычно был «бот» или «робот» - я знаю, что Google - это робот Google.
Аарона
Хорошая точка зрения. Пока это можно различить. Вероятно, есть пост о том, как выкладывать это.
Jcolebrand
2
  • При необходимости сохраняйте куки, чтобы веб-сайт не создавал ненужных сессий.
  • Реализуйте поведение при разборе ссылок, наиболее близкое к браузерному. Наш сайт в реальном времени сообщает о значении 404 из-за запросов ботов на отсутствующие файлы.
Валера Колупаев
источник