Nota: Como a versão completa desta resposta excede o limite de tamanho do Stack Overflow, você precisará ir ao GitHub para ler a versão estendida, com mais dicas e detalhes.
A fim de dificultar a raspagem (também conhecido como Webscraping , screenscraping , mineração de dados Web , a colheita Web , ou extração de dados Web ), que ajuda a saber como estes raspadores de trabalho, e, por extensão, o que os impede de trabalhar bem.
Existem vários tipos de raspador e cada um funciona de maneira diferente:
Aranhas, como as copiadoras de sites ou bot do Google, como o HTtrack , que seguem recursivamente os links para outras páginas para obter dados. Às vezes, eles são usados para raspagem direcionada para obter dados específicos, geralmente em combinação com um analisador de HTML para extrair os dados desejados de cada página.
Scripts shell: Às vezes, ferramentas comuns do Unix são usadas para raspagem: Wget ou Curl para fazer download de páginas e Grep (Regex) para extrair os dados.
Analisadores de HTML, como os baseados em Jsoup, Scrapy e outros. Semelhante aos regex baseados em shell-script, eles funcionam extraindo dados de páginas com base em padrões em HTML, geralmente ignorando todo o resto.
Por exemplo: se o seu site tiver um recurso de pesquisa, esse raspador poderá enviar uma solicitação de pesquisa e, em seguida, obter todos os links de resultados e seus títulos no HTML da página de resultados, para obter especificamente apenas os links de resultados de pesquisa e seus títulos . Estes são os mais comuns.
Raspadores de tela, baseados em, por exemplo. Selenium ou PhantomJS , que abrem seu site em um navegador real, executam JavaScript, AJAX e assim por diante e, em seguida, obtêm o texto desejado da página, geralmente por:
Obtendo o HTML do navegador depois que sua página foi carregada e o JavaScript foi executado e, em seguida, usando um analisador de HTML para extrair os dados desejados. Estes são os mais comuns e muitos dos métodos para quebrar analisadores / raspadores de HTML também funcionam aqui.
Tirando uma captura de tela das páginas renderizadas e, em seguida, usando o OCR para extrair o texto desejado da captura de tela. Isso é raro, e somente os raspadores dedicados que realmente desejam seus dados configuram isso.
Serviços de raspagem na Web, como ScrapingHub ou Kimono . De fato, há pessoas cujo trabalho é descobrir como raspar seu site e extrair o conteúdo para uso de outras pessoas.
Não é de surpreender que os serviços de raspagem profissional sejam os mais difíceis de impedir, mas se você tornar difícil e demorado descobrir como raspar seu site, eles (e as pessoas que pagam por isso) podem não se dar ao trabalho de raspar seu site.
Incorporar seu site nas páginas de outros sites com quadros e incorporar seu site em aplicativos móveis.
Embora não seja tecnicamente possível, os aplicativos móveis (Android e iOS) podem incorporar sites e injetar CSS e JavaScript personalizados, alterando completamente a aparência de suas páginas.
Copiar e colar manualmente: as pessoas copiarão e colarão seu conteúdo para usá-lo em outro lugar.
Há muita sobreposição entre esses diferentes tipos de raspadores, e muitos raspadores se comportam de maneira semelhante, mesmo que usem tecnologias e métodos diferentes.
Essas dicas são principalmente minhas próprias idéias, várias dificuldades que encontrei enquanto escrevia scrapers, além de informações e idéias de todas as interwebs.
Como parar a raspagem
Você não pode evitá-lo completamente , pois, faça o que fizer, raspadores determinados ainda podem descobrir como raspar. No entanto, você pode impedir muitas raspagens fazendo algumas coisas:
Monitore seus logs e padrões de tráfego; limite o acesso se você ver uma atividade incomum:
Verifique seus logs regularmente e, no caso de atividades incomuns indicativas de acesso automatizado (scrapers), como muitas ações semelhantes do mesmo endereço IP, você pode bloquear ou limitar o acesso.
Especificamente, algumas idéias:
Limite de taxa:
Permitir apenas que usuários (e raspadores) realizem um número limitado de ações em um determinado período de tempo - por exemplo, permita apenas algumas pesquisas por segundo em qualquer endereço IP ou usuário específico. Isso reduzirá a velocidade dos raspadores e os tornará ineficazes. Você também pode mostrar um captcha se as ações forem concluídas muito rápido ou mais rápido do que um usuário real faria.
Detectar atividades incomuns:
Se houver atividades incomuns, como muitas solicitações semelhantes de um endereço IP específico, alguém que esteja visualizando um número excessivo de páginas ou realizando um número incomum de pesquisas, poderá impedir o acesso ou mostrar um captcha para solicitações subsequentes.
Não apenas monitore e limite de taxa por endereço IP - use outros indicadores também:
Se você bloquear ou limitar a taxa, não faça isso apenas por endereço IP; você pode usar outros indicadores e métodos para identificar usuários ou raspadores específicos. Alguns indicadores que podem ajudá-lo a identificar usuários / raspadores específicos incluem:
A rapidez com que os usuários preenchem os formulários e onde clicam em um botão;
Você pode reunir muitas informações com JavaScript, como tamanho / resolução da tela, fuso horário, fontes instaladas etc. você pode usar isso para identificar usuários.
Cabeçalhos HTTP e sua ordem, especialmente User-Agent.
Por exemplo, se você receber muitas solicitações de um único endereço IP, todas usando o mesmo User Agent, tamanho da tela (determinado com JavaScript) e o usuário (raspador nesse caso) sempre clicam no botão da mesma maneira e em intervalos regulares, provavelmente é um raspador de tela; e você pode bloquear temporariamente solicitações semelhantes (por exemplo, bloquear todas as solicitações com o agente do usuário e o tamanho da tela provenientes desse endereço IP específico) e, dessa forma, você não incomodará usuários reais nesse endereço IP, por exemplo. no caso de uma conexão de internet compartilhada.
Você também pode levar isso adiante, pois pode identificar solicitações semelhantes, mesmo que sejam provenientes de diferentes endereços IP, indicativas de raspagem distribuída (um raspador usando uma botnet ou uma rede de proxies). Se você receber muitas solicitações idênticas, mas elas vierem de endereços IP diferentes, poderá bloquear. Novamente, lembre-se de não bloquear inadvertidamente usuários reais.
Isso pode ser eficaz contra os scrapers que executam JavaScript, pois você pode obter muitas informações deles.
Perguntas relacionadas sobre o Security Stack Exchange:
Em vez de bloquear temporariamente o acesso, use um Captcha:
A maneira simples de implementar a limitação de taxa seria bloquear temporariamente o acesso por um certo período de tempo; no entanto, usar um Captcha pode ser melhor, consulte a seção Captchas mais adiante.
Exigir registro e login
Exija a criação da conta para visualizar seu conteúdo, se isso for viável para o seu site. Este é um bom impedimento para raspadores, mas também um bom impedimento para usuários reais.
- Se você precisar de criação e login de conta, poderá rastrear com precisão as ações do usuário e do raspador. Dessa forma, você pode detectar facilmente quando uma conta específica está sendo usada para raspagem e bani-la. Coisas como limitar a taxa ou detectar abusos (como um grande número de pesquisas em pouco tempo) ficam mais fáceis, pois você pode identificar raspadores específicos em vez de apenas endereços IP.
Para evitar que scripts criem muitas contas, você deve:
Exija um endereço de email para registro e verifique esse endereço enviando um link que deve ser aberto para ativar a conta. Permitir apenas uma conta por endereço de email.
Exija que um captcha seja resolvido durante o registro / criação da conta.
Exigir a criação da conta para exibir o conteúdo afastará usuários e mecanismos de pesquisa; se você precisar da criação de uma conta para visualizar um artigo, os usuários irão para outro lugar.
Bloqueie o acesso dos endereços IP do serviço de hospedagem em nuvem e raspagem
Às vezes, os raspadores são executados a partir de serviços de hospedagem na web, como Amazon Web Services ou GAE ou VPSes. Limite o acesso ao seu site (ou mostre um captcha) para solicitações originadas dos endereços IP usados por esses serviços de hospedagem em nuvem.
Da mesma forma, você também pode limitar o acesso de endereços IP usados por provedores de proxy ou VPN, pois os raspadores podem usar esses servidores proxy para evitar que muitas solicitações sejam detectadas.
Cuidado ao bloquear o acesso de servidores proxy e VPNs, você afetará negativamente usuários reais.
Torne sua mensagem de erro indefinida se você bloquear
Se você bloquear / limitar o acesso, certifique-se de não contar ao raspador o que causou o bloco, fornecendo pistas sobre como consertar o raspador. Portanto, uma má idéia seria mostrar páginas de erro com texto como:
Muitas solicitações do seu endereço IP, tente novamente mais tarde.
Erro, cabeçalho do agente do usuário não presente!
Em vez disso, mostre uma mensagem de erro amigável que não diz ao raspador o que o causou. Algo assim é muito melhor:
- Desculpe, algo deu errado. Você pode entrar em contato com o suporte via
helpdesk@example.com
, se o problema persistir.
Isso também é muito mais amigável para usuários reais, caso eles vejam essa página de erro. Você também deve considerar mostrar um captcha para solicitações subsequentes em vez de um bloco rígido, caso um usuário real veja a mensagem de erro, para que você não bloqueie e, assim, faça com que usuários legítimos entrem em contato com você.
Use o Captchas se você suspeitar que seu site está sendo acessado por um raspador.
Captchas ("Teste completamente automatizado para diferenciar computadores e humanos") são muito eficazes contra a interrupção de raspadores. Infelizmente, eles também são muito eficazes para irritar os usuários.
Como tal, eles são úteis quando você suspeita de um possível raspador e deseja interromper a raspagem, sem também bloquear o acesso, caso não seja um raspador, mas um usuário real. Você pode considerar mostrar um captcha antes de permitir o acesso ao conteúdo se suspeitar de um raspador.
Informações importantes ao usar o Captchas:
Não faça o seu próprio, use algo como o reCaptcha do Google : é muito mais fácil do que implementar um captcha, é mais fácil de usar do que alguma solução de texto distorcida e distorcida que você pode criar (os usuários geralmente precisam marcar uma caixa) ) e também é muito mais difícil resolver um scripter do que uma imagem simples veiculada em seu site
Não inclua a solução para o captcha na marcação HTML: na verdade, vi um site que tinha a solução para o captcha na própria página (embora muito bem oculta), tornando-o bastante inútil. Não faça algo assim. Novamente, use um serviço como o reCaptcha e você não terá esse tipo de problema (se você usá-lo corretamente).
Os captchas podem ser resolvidos em grandes quantidades: Existem serviços de resolução de captcha em que humanos reais e mal pagos resolvem os captchas em grandes quantidades. Novamente, usar o reCaptcha é uma boa ideia aqui, pois eles têm proteções (como o tempo relativamente curto que o usuário tem para resolver o captcha). É improvável que esse tipo de serviço seja usado, a menos que seus dados sejam realmente valiosos.
Sirva seu conteúdo de texto como uma imagem
Você pode renderizar texto em um servidor de imagem e servir a exibição, o que impedirá que simples raspadores extraiam texto.
No entanto, isso é ruim para os leitores de tela, mecanismos de busca, desempenho e praticamente todo o resto. Também é ilegal em alguns lugares (devido à acessibilidade, por exemplo, a Lei dos Americanos com Deficiência), e também é fácil contornar com algum OCR, por isso não faça isso.
Você pode fazer algo semelhante com sprites CSS, mas que sofre dos mesmos problemas.
Não exponha seu conjunto de dados completo:
Se possível, não forneça uma maneira de um script / bot obter todo o seu conjunto de dados. Como exemplo: você tem um site de notícias, com muitos artigos individuais. Você pode tornar esses artigos acessíveis apenas pesquisando-os por meio da pesquisa no site e, se você não tiver uma lista de todos os artigos no site e seus URLs em qualquer lugar, esses artigos serão acessíveis apenas usando a pesquisa característica. Isso significa que um script que deseja obter todos os artigos de seu site precisará pesquisar todas as frases possíveis que possam aparecer em seus artigos para encontrá-las, o que consumirá tempo, será terrivelmente ineficiente e, com sorte, tornará o raspador desiste.
Isso será ineficaz se:
- O bot / script não quer / precisa do conjunto de dados completo de qualquer maneira.
- Seus artigos são veiculados a partir de um URL com aparência semelhante
example.com/article.php?articleId=12345
. Isso (e coisas semelhantes) que permitirá que os raspadores iterem sobre todos os se articleId
solicitem todos os artigos dessa maneira.
- Existem outras maneiras de, eventualmente, encontrar todos os artigos, como escrever um script para seguir os links nos artigos que levam a outros artigos.
- Procurar algo como "and" ou "the" pode revelar quase tudo, portanto é algo para estar ciente. (Você pode evitar isso retornando apenas os 10 ou 20 melhores resultados).
- Você precisa de mecanismos de pesquisa para encontrar seu conteúdo.
Não exponha suas APIs, pontos de extremidade e coisas semelhantes:
Certifique-se de não expor nenhuma API, mesmo que não intencionalmente. Por exemplo, se você estiver usando solicitações de rede ou AJAX no Adobe Flash ou Java Applets (Deus não permita!) Para carregar seus dados, é trivial olhar para as solicitações de rede da página e descobrir para onde essas solicitações estão indo; faça a engenharia reversa e use esses pontos de extremidade em um programa de raspador. Certifique-se de ofuscar seus pontos de extremidade e dificultar o uso de outras pessoas, conforme descrito.
Para impedir analisadores e raspadores de HTML:
Como os analisadores de HTML funcionam extraindo conteúdo de páginas com base em padrões identificáveis no HTML, podemos intencionalmente alterar esses padrões para evitar quebrar esses raspadores, ou até mesmo mexer com eles. A maioria dessas dicas também se aplica a outros raspadores, como aranhas e raspadores de tela.
Altere frequentemente o seu HTML
Os raspadores que processam HTML diretamente o fazem extraindo conteúdo de partes específicas e identificáveis da sua página HTML. Por exemplo: se todas as páginas do seu site tiverem um div
ID com article-content
, que contém o texto do artigo, é trivial escrever um script para visitar todas as páginas do artigo em seu site e extrair o texto do conteúdo da article-content
div em cada página de artigo e pronto, o raspador possui todos os artigos do seu site em um formato que pode ser reutilizado em outro lugar.
Se você alterar o HTML e a estrutura de suas páginas com frequência, esses raspadores não funcionarão mais.
Você pode alterar frequentemente os IDs e classes de elementos em seu HTML, talvez até automaticamente. Portanto, se você se div.article-content
tornar algo semelhante div.a4c36dda13eaf0
e mudar a cada semana, o raspador funcionará bem inicialmente, mas será interrompido após uma semana. Altere também o tamanho dos seus IDs / classes, caso contrário, o raspador usará div.[any-14-characters]
para encontrar a div desejada. Cuidado com outros buracos semelhantes também ..
Se não houver como encontrar o conteúdo desejado a partir da marcação, o raspador fará isso da maneira como o HTML está estruturado. Então, se todas as suas páginas de artigos são semelhantes em que cada div
dentro de um div
que vem depois de um h1
é o conteúdo do artigo, raspadores terá o conteúdo do artigo com base nisso. Novamente, para quebrar isso, você pode adicionar / remover marcações extras no seu HTML, periodicamente e aleatoriamente, por exemplo. adicionando div
s ou s extras span
. Com o processamento HTML moderno do lado do servidor, isso não deve ser muito difícil.
Coisas a ter em atenção:
Será tedioso e difícil de implementar, manter e depurar.
Você dificultará o cache. Especialmente se você alterar os IDs ou classes de seus elementos HTML, isso exigirá alterações correspondentes nos arquivos CSS e JavaScript, o que significa que toda vez que você os alterar, eles deverão ser baixados novamente pelo navegador. Isso resultará em tempos de carregamento de página mais longos para visitantes repetidos e aumento no carregamento do servidor. Se você o alterar apenas uma vez por semana, não será um grande problema.
Raspadores inteligentes ainda serão capazes de obter seu conteúdo, inferindo onde está o conteúdo real, por exemplo. sabendo que é provável que um grande bloco de texto na página seja o artigo real. Isso possibilita ainda encontrar e extrair os dados desejados da página. O Boilerpipe faz exatamente isso.
Essencialmente, verifique se não é fácil para um script encontrar o conteúdo real e desejado para todas as páginas semelhantes.
Consulte também Como impedir que os rastreadores, dependendo do XPath, obtenham o conteúdo da página para obter detalhes sobre como isso pode ser implementado no PHP.
Altere seu HTML com base na localização do usuário
Isso é parecido com a dica anterior. Se você servir HTML diferente com base na localização / país do usuário (determinado pelo endereço IP), isso poderá quebrar os raspadores que são entregues aos usuários. Por exemplo, se alguém estiver escrevendo um aplicativo móvel que rastreia dados do seu site, ele funcionará bem inicialmente, mas será interrompido quando for realmente distribuído aos usuários, pois esses usuários podem estar em um país diferente e, portanto, obterão HTML diferente, que é o raspador incorporado não foi projetado para consumir.
Altere frequentemente o seu HTML, parafuse-o ativamente com os raspadores ao fazê-lo!
Um exemplo: você tem um recurso de pesquisa em seu site, localizado em example.com/search?query=somesearchquery
, que retorna o seguinte HTML:
<div class="search-result">
<h3 class="search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
<p class="search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
<a class"search-result-link" href="/stories/story-link">Read more</a>
</div>
(And so on, lots more identically structured divs with search results)
Como você deve ter adivinhado, é fácil raspar: tudo o que um raspador precisa fazer é pressionar o URL de pesquisa com uma consulta e extrair os dados desejados do HTML retornado. Além de alterar periodicamente o HTML, conforme descrito acima, você também pode deixar a marcação antiga com os IDs e classes antigos, ocultá-la com CSS e preenchê-la com dados falsos, envenenando o raspador. Veja como a página de resultados da pesquisa pode ser alterada:
<div class="the-real-search-result">
<h3 class="the-real-search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
<p class="the-real-search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
<a class"the-real-search-result-link" href="/stories/story-link">Read more</a>
</div>
<div class="search-result" style="display:none">
<h3 class="search-result-title">Visit Example.com now, for all the latest Stack Overflow related news !</h3>
<p class="search-result-excerpt">Example.com is so awesome, visit now !</p>
<a class"search-result-link" href="http://example.com/">Visit Now !</a>
</div>
(More real search results follow)
Isso significa que os raspadores escritos para extrair dados do HTML com base em classes ou IDs continuarão aparentemente funcionando, mas receberão dados falsos ou até anúncios, dados que os usuários reais nunca verão, pois estão ocultos no CSS.
Parafuso com o raspador: insira dados honeypot falsos e invisíveis em sua página
Adicionando ao exemplo anterior, você pode adicionar itens de honeypot invisíveis ao seu HTML para capturar raspadores. Um exemplo que pode ser adicionado à página de resultados de pesquisa descrita anteriormente:
<div class="search-result" style="display:none">
<h3 class="search-result-title">This search result is here to prevent scraping</h3>
<p class="search-result-excerpt">If you're a human and see this, please ignore it. If you're a scraper, please click the link below :-)
Note that clicking the link below will block access to this site for 24 hours.</p>
<a class"search-result-link" href="/scrapertrap/scrapertrap.php">I'm a scraper !</a>
</div>
(The actual, real, search results follow.)
Um raspador escrito para obter todos os resultados da pesquisa selecionará isso, como qualquer outro resultado de pesquisa real na página, e acessará o link, procurando o conteúdo desejado. Um ser humano real nunca o verá em primeiro lugar (devido ao fato de estar oculto com CSS) e não visitará o link. Uma aranha genuína e desejável como a do Google também não acessará o link porque você não permitiu o /scrapertrap/
seu robots.txt.
Você pode fazer scrapertrap.php
algo como bloquear o acesso ao endereço IP que o visitou ou forçar um captcha para todas as solicitações subseqüentes desse IP.
Não se esqueça de proibir seu honeypot ( /scrapertrap/
) no arquivo robots.txt para que os bots dos mecanismos de pesquisa não caiam nele.
Você pode / deve combinar isso com a dica anterior de alterar seu HTML com frequência.
Mude isso com frequência também, pois os raspadores acabarão aprendendo a evitá-lo. Altere o URL e o texto do honeypot. Também considere alterar o CSS embutido usado para ocultar e, em vez disso, use um atributo de ID e um CSS externo, pois os raspadores aprenderão a evitar qualquer coisa que tenha um style
atributo com CSS usado para ocultar o conteúdo. Tente também ativá-lo apenas algumas vezes, para que o raspador funcione inicialmente, mas quebre depois de um tempo. Isso também se aplica à dica anterior.
Pessoas mal-intencionadas podem impedir o acesso de usuários reais, compartilhando um link para seu honeypot ou até incorporando esse link em algum lugar como uma imagem (por exemplo, em um fórum). Altere o URL com frequência e reduza os tempos de proibição.
Servir dados falsos e inúteis se você detectar um raspador
Se você detectar o que é obviamente um raspador, poderá fornecer dados falsos e inúteis; isso corromperá os dados que o raspador obtém do seu site. Você também deve tornar impossível distinguir esses dados falsos dos dados reais, para que os raspadores não saibam que estão sendo feridos.
Como exemplo: você tem um site de notícias; se você detectar um raspador, em vez de bloquear o acesso, publique artigos falsos gerados aleatoriamente e isso envenenará os dados que o raspador obtém. Se você tornar seus dados falsos indistinguíveis dos reais, dificultará que os raspadores obtenham o que desejam, ou seja, os dados reais.
Não aceite solicitações se o agente do usuário estiver vazio / ausente
Frequentemente, raspadores escritos preguiçosamente não enviam um cabeçalho de agente do usuário com sua solicitação, enquanto todos os navegadores, bem como as aranhas dos mecanismos de pesquisa, enviam.
Se você receber uma solicitação em que o cabeçalho do Agente do Usuário não esteja presente, poderá mostrar um captcha ou simplesmente bloquear ou limitar o acesso. (Ou envie dados falsos conforme descrito acima ou algo mais ..)
É trivial falsificar, mas vale a pena implementar como medida contra raspadores mal escritos.
Não aceite solicitações se o agente do usuário for um raspador comum; lista negra usada por raspadores
Em alguns casos, os raspadores usarão um Agente do usuário que nenhum navegador ou mecanismo de busca real usa, como:
- "Mozilla" (apenas isso, nada mais. Vi algumas perguntas sobre como copiar aqui, usando isso. Um navegador real nunca usará apenas isso)
- "Java 1.7.43_u43" (Por padrão, o HttpUrlConnection do Java usa algo como isto.)
- "BIZCO EasyScraping Studio 2.0"
- "wget", "curl", "libcurl", .. (Wget e cURL às vezes são usados para raspagem básica)
Se você achar que uma sequência específica de agente do usuário é usada por raspadores em seu site e não é usada por navegadores reais ou aranhas legítimas, você também pode adicioná-la à sua lista negra.
Se ele não solicitar recursos (CSS, imagens), não será um navegador real.
Um navegador real (quase sempre) solicita e baixa ativos, como imagens e CSS. Analisadores e raspadores de HTML não irão, pois estão interessados apenas nas páginas reais e em seu conteúdo.
Você pode registrar solicitações em seus ativos e, se vir muitas solicitações apenas para o HTML, pode ser um raspador.
Observe que os robôs de mecanismo de pesquisa, dispositivos móveis antigos, leitores de tela e dispositivos configurados incorretamente também não podem solicitar ativos.
Use e exija cookies; use-os para rastrear ações do usuário e do raspador.
Você pode exigir que os cookies sejam ativados para visualizar seu site. Isso impedirá os criadores inexperientes e novatos de raspadores, mas é fácil para um raspador enviar cookies. Se você as usar e exigir, poderá acompanhar as ações do usuário e do raspador com elas e, assim, implementar limites de taxa, bloqueio ou exibição de captchas por usuário e não por IP.
Por exemplo: quando o usuário realiza a pesquisa, defina um cookie de identificação exclusivo. Quando as páginas de resultados forem exibidas, verifique esse cookie. Se o usuário abrir todos os resultados da pesquisa (você pode ver pelo cookie), provavelmente é um raspador.
O uso de cookies pode ser ineficaz, pois os raspadores também podem enviar os cookies com seus pedidos e descartá-los conforme necessário. Você também impedirá o acesso de usuários reais com cookies desativados, se o site funcionar apenas com cookies.
Observe que, se você usar o JavaScript para definir e recuperar o cookie, bloqueará os raspadores que não executam JavaScript, pois eles não podem recuperar e enviar o cookie com a solicitação.
Use JavaScript + Ajax para carregar seu conteúdo
Você pode usar JavaScript + AJAX para carregar seu conteúdo após o carregamento da própria página. Isso tornará o conteúdo inacessível para os analisadores HTML que não executam JavaScript. Isso geralmente é um impedimento eficaz para programadores novatos e inexperientes que escrevem raspadores.
Estar ciente de:
Usar JavaScript para carregar o conteúdo real prejudicará a experiência e o desempenho do usuário
Os mecanismos de pesquisa também não podem executar JavaScript, impedindo-os de indexar seu conteúdo. Isso pode não ser um problema para as páginas de resultados de pesquisa, mas pode ser para outras coisas, como páginas de artigos.
Ofusque sua marcação, solicitações de rede de scripts e tudo mais.
Se você usar Ajax e JavaScript para carregar seus dados, ofusque os dados transferidos. Como exemplo, você pode codificar seus dados no servidor (com algo tão simples quanto base64 ou mais complexo) e, em seguida, decodificar e exibi-los no cliente, depois de buscar pelo Ajax. Isso significa que alguém que inspeciona o tráfego de rede não verá imediatamente como sua página funciona e carrega dados, e será mais difícil alguém solicitar diretamente os dados de solicitação de seus pontos de extremidade, pois terá que fazer engenharia reversa no seu algoritmo de decodificação.
Se você usa o Ajax para carregar os dados, deve dificultar o uso dos terminais sem carregar a página primeiro, por exemplo, exigindo alguma chave de sessão como parâmetro, que você pode incorporar no seu JavaScript ou HTML.
Você também pode incorporar seus dados ofuscados diretamente na página HTML inicial e usar JavaScript para desofusar e exibi-los, o que evitaria solicitações de rede extras. Isso tornará significativamente mais difícil extrair os dados usando um analisador somente HTML que não execute JavaScript, pois aquele que está escrevendo o raspador terá que fazer engenharia reversa no seu JavaScript (que você também deve ofuscar).
Você pode alterar seus métodos de ofuscação regularmente, para quebrar os raspadores que descobriram isso.
Existem várias desvantagens em fazer algo assim:
Será tedioso e difícil de implementar, manter e depurar.
Será ineficaz contra raspadores e raspadores de tela que realmente executam JavaScript e extraem os dados. (Embora a maioria dos analisadores HTML simples não execute JavaScript)
Isso tornará seu site não funcional para usuários reais se eles tiverem o JavaScript desativado.
O desempenho e o tempo de carregamento da página sofrerão.
Não técnico:
Diga às pessoas para não raspar, e alguns o respeitarão
Encontre um advogado
Disponibilize seus dados, forneça uma API:
Você pode disponibilizar seus dados facilmente e exigir atribuição e um link para o seu site. Talvez cobrar $$$ por isso.
Diversos:
Também existem serviços comerciais de proteção contra raspagem, como o anti-raspagem da Cloudflare ou Distill Networks (detalhes sobre como funciona aqui ), que faz essas coisas e muito mais para você.
Encontre um equilíbrio entre a usabilidade para usuários reais e a proteção contra raspadores: tudo o que você fizer terá um impacto negativo na experiência do usuário, de uma maneira ou de outra, encontre comprometimentos.
Não esqueça seu site e aplicativos para celular. Se você tiver um aplicativo móvel, ele também poderá ser rastreado por tela e o tráfego de rede poderá ser inspecionado para determinar os pontos de extremidade REST que ele usa.
Os raspadores podem raspar outros raspadores: se houver um site com conteúdo raspado no seu, outros raspadores poderão raspar no site do raspador.
Leitura adicional: