Каковы ключевые соображения при создании поискового робота?

Здесь проблема заключается в том, что сигнатура шаблона для add() одинакова: шаблон функции с двумя типами параметров.

Итак, когда вы пишете:

template<
    typename T, 
    typename = std::enable_if_t::value, T>>
void Add(T) {}

Это нормально, но когда вы пишете:

template<
    typename T, 
    typename = std::enable_if_t::value, T>>
void Add(T) {}

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

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

template
std::enable_if_t::value> Add(T) {}
template
std::enable_if_t::value> Add(T) {}

Рабочий пример в Coliru

В коде выше, если T == int, вторая подпись становится недействительной и который запускает SFINAE.

NB: Предположим, что вам нужны N реализаций. Вы можете использовать тот же трюк, что и выше, но вам нужно убедиться, что только один логический из N является истинным, а N-1, который остается ложным, в противном случае вы получите ту же самую ошибку!

11
задан Kara 24 April 2014 в 00:19
поделиться

9 ответов

Повинуйтесь robots.txt (и не слишком агрессивный как уже был сказан).

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

9
ответ дан 3 December 2019 в 03:06
поделиться

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

Некоторые полезные ссылки:

HTTP/1.1: Определения Кода состояния

Клиент агрегатора тесты HTTP

Википедия

3
ответ дан 3 December 2019 в 03:06
поделиться

Обязательно включайте URL в Вашу строку агента пользователя, которая объясняет who/what/why, Ваш робот сканирования.

3
ответ дан 3 December 2019 в 03:06
поделиться

Все положительные стороны, те сделанные здесь. Необходимо будет также иметь дело с динамично сгенерированным Java и ссылками JavaScript, параметрами и идентификаторами сессии, выходя из одинарных и двойных кавычек, неудачных попыток в относительных ссылках (использующий../../для движения мимо корневого каталога), чувствительность к регистру, кадры, перенаправления, cookie....

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

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

3
ответ дан 3 December 2019 в 03:06
поделиться

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

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

2
ответ дан 3 December 2019 в 03:06
поделиться

Также не забывайте повиноваться метатегам бота: http://www.w3.org/TR/html4/appendix/notes.html#h-B.4.1.2

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

3
ответ дан 3 December 2019 в 03:06
поделиться

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

Конечно, повинуйтесь robots.txt, но также и удостоверьтесь, что Ваша строка агента пользователя включает точную контактную информацию и возможно ссылку на веб-страницу, описывающую, что Вы делаете и как Вы делаете это. Если веб-администратор видит много запросов от Вас и любопытен, Вы смогли отвечать на большое количество вопросов с информативной веб-страницей.

2
ответ дан 3 December 2019 в 03:06
поделиться

Это совершенно accetable, чтобы сделать - просто удостоверяются, что это только посещает каждую страницу однажды для каждой сессии. Поскольку Вы технически создаете searchbot, необходимо повиноваться robots.txt и no-cache правила. Люди могут все еще заблокировать Вашего бота конкретно в случае необходимости путем блокирования дюйм/с.

Вы только ищете исходный код насколько я могу сказать, таким образом, Вы захотите создать что-то для следования <link>s для таблиц стилей и <script src="..."></script> для JavaScripts.

2
ответ дан 3 December 2019 в 03:06
поделиться

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

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

Также не доверяйте 200 состояниям, чтобы означать, что "страница существует". Настоящая значительная доля сайтов передает обратно 200 для "Не найденный" или другие ошибки, по моему опыту (Наряду с большим документом HTML).

2
ответ дан 3 December 2019 в 03:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: