как обнаружить ботов поисковой системы с php?

Консоль Windows поддерживает кодировку UTF-16LE UNICODE.

Вы можете использовать некоторую библиотеку управления коробками, например, PDCurses .

В противном случае вы можете использовать следующий подход

#include 
#include 

class output_swap {
    output_swap(const output_swap&) = delete;
    output_swap operator=(output_swap&) = delete;
public:
    output_swap( ) noexcept:
        prevCP_( ::GetConsoleCP() )
    {
        ::SetConsoleCP( CP_WINUNICODE );
        ::SetConsoleOutputCP( CP_WINUNICODE );
    }
    ~output_swap() noexcept {
        ::SetConsoleCP( prevCP_ );
        ::SetConsoleOutputCP( prevCP_ );
    }
private:
    ::DWORD prevCP_;
};

void draw_text(const wchar_t* text)
{
  static ::HANDLE _out = ::GetStdHandle(STD_OUTPUT_HANDLE);
  ::DWORD written;
  ::WriteConsoleW( _out, text, std::wcslen(text), &written, nullptr );
}

int main(int argc, const char** argv) {
   output_swap swap;
   draw_text(L"┏━━━━━━━━━━━━━━━━━┓\n");
   draw_text(L"┃        OK       ┃\n");
   draw_text(L"┗━━━━━━━━━━━━━━━━━┛\n");
   return 0;
}

Также проверьте ваш шрифт консоли в настройках консоли. Вероятно, вам нужен растровый шрифт, но это также работает, например, для Consolas.

Если вам нужны консольные потоки ввода-вывода, которые могут работать как с юникодом, так и с переключением блоков, вы можете использовать мою библиотеку

115
задан Christian Gollhardt 31 March 2015 в 05:38
поделиться

4 ответа

Вот Каталог Поисковой системы имен Паука

Затем Вы используете $_SERVER['HTTP_USER_AGENT']; проверять, ли агент, сказало паука.

if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot"))
{
    // what to do
}
74
ответ дан Ólafur Waage 24 November 2019 в 02:19
поделиться

Проверьте $_SERVER['HTTP_USER_AGENT'] для некоторых строк, перечисленных здесь:

http://www.useragentstring.com/pages/useragentstring.php

Или больше специально для поисковых роботов:

http://www.useragentstring.com/pages/useragentstring.php?typ=Crawler

Если Вы хотите к - говорят, регистрируют количество посещений наиболее распространенных поисковых роботов поисковой системы, Вы могли использовать

$interestingCrawlers = array( 'google', 'yahoo' );
$pattern = '/(' . implode('|', $interestingCrawlers) .')/';
$matches = array();
$numMatches = preg_match($pattern, strtolower($_SERVER['HTTP_USER_AGENT']), $matches, 'i');
if($numMatches > 0) // Found a match
{
  // $matches[1] contains an array of all text matches to either 'google' or 'yahoo'
}
19
ответ дан VisaDev 24 November 2019 в 02:19
поделиться

Вы могли проанализировать агент пользователя ($_SERVER['HTTP_USER_AGENT']) или сравните IP-адрес клиента ($_SERVER['REMOTE_ADDR']) со списком IP-адресов ботов поисковой системы.

6
ответ дан Gumbo 24 November 2019 в 02:19
поделиться
 <?php // IPCLOACK HOOK
if (CLOAKING_LEVEL != 4) {
    $lastupdated = date("Ymd", filemtime(FILE_BOTS));
    if ($lastupdated != date("Ymd")) {
        $lists = array(
        'http://labs.getyacg.com/spiders/google.txt',
        'http://labs.getyacg.com/spiders/inktomi.txt',
        'http://labs.getyacg.com/spiders/lycos.txt',
        'http://labs.getyacg.com/spiders/msn.txt',
        'http://labs.getyacg.com/spiders/altavista.txt',
        'http://labs.getyacg.com/spiders/askjeeves.txt',
        'http://labs.getyacg.com/spiders/wisenut.txt',
        );
        foreach($lists as $list) {
            $opt .= fetch($list);
        }
        $opt = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $opt);
        $fp =  fopen(FILE_BOTS,"w");
        fwrite($fp,$opt);
        fclose($fp);
    }
    $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
    $ref = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
    $agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
    $host = strtolower(gethostbyaddr($ip));
    $file = implode(" ", file(FILE_BOTS));
    $exp = explode(".", $ip);
    $class = $exp[0].'.'.$exp[1].'.'.$exp[2].'.';
    $threshold = CLOAKING_LEVEL;
    $cloak = 0;
    if (stristr($host, "googlebot") && stristr($host, "inktomi") && stristr($host, "msn")) {
        $cloak++;
    }
    if (stristr($file, $class)) {
        $cloak++;
    }
    if (stristr($file, $agent)) {
        $cloak++;
    }
    if (strlen($ref) > 0) {
        $cloak = 0;
    }

    if ($cloak >= $threshold) {
        $cloakdirective = 1;
    } else {
        $cloakdirective = 0;
    }
}
?>

Это было бы идеальным способом скрыть для пауков. Это из сценария с открытым исходным кодом под названием [YACG] - http://getyacg.com

Потребности немного работы, но определенно способ пойти.

4
ответ дан L. Cosio 24 November 2019 в 02:19
поделиться
Другие вопросы по тегам:

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