Eu tenho um site de música bastante grande, com um grande banco de dados de artistas. Eu tenho notado outros sites de música raspando os dados do nosso site (insiro nomes fictícios de artistas aqui e ali e depois faço pesquisas no Google por eles).
Como posso impedir a raspagem da tela? Isso é possível?
Respostas:
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:
Como identificar exclusivamente usuários com o mesmo endereço IP externo? para mais detalhes e
Por que as pessoas usam proibições de endereço IP quando os endereços IP geralmente mudam? para obter informações sobre os limites desses métodos.
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.
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:
[email protected]
, 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:
example.com/article.php?articleId=12345
. Isso (e coisas semelhantes) que permitirá que os raspadores iterem sobre todos os searticleId
solicitem todos os artigos dessa maneira.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 comarticle-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 daarticle-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 semelhantediv.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 umdiv
que vem depois de umh1
é 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. adicionandodiv
s ou s extrasspan
. 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: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:
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:
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:
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:
Artigo da Wikipedia sobre raspagem na Web . Muitos detalhes sobre as tecnologias envolvidas e os diferentes tipos de raspador de tela.
Impedindo os scripts de baterem seu site centenas de vezes por segundo . Perguntas e respostas sobre um problema muito semelhante - robôs verificando um site e comprando coisas assim que são colocados à venda. Muita informação relevante, esp. em Captchas e com limite de taxa.
fonte
A real browser will (almost always) request and download assets such as images and CSS
também é verdade para os leitores de acessibilidade? O CAPTCHA está quebrado, pelo menos os serviços profissionais provavelmente não são prejudicados por ele. O uso de cookies requer notificação / consentimento na UE.Find a balance between usability for real users and scraper-proofness
também equilibre tempo / complexidade de programação versus benefício financeiro.Eu presumo que você configurou
robots.txt
.Como outros já mencionaram, os raspadores podem fingir quase todos os aspectos de suas atividades, e provavelmente é muito difícil identificar as solicitações vindas dos bandidos.
Eu consideraria:
/jail.html
.robots.txt
(para que as aranhas respeitosas nunca a visitem).display: none
)./jail.html
.Isso pode ajudá-lo a identificar rapidamente solicitações de raspadores que estão desconsiderando flagrantemente a sua
robots.txt
.Você também pode querer fazer o seu
/jail.html
todo um site inteiro que tem a mesma marcação, exato como páginas normais, mas com dados falsos (/jail/album/63ajdka
,/jail/track/3aads8
, etc.). Dessa forma, os raspadores ruins não serão alertados sobre "entradas incomuns" até que você tenha a chance de bloqueá-los completamente.fonte
Sue 'em.
Sério: se você tiver algum dinheiro, converse com um bom, bom e jovem advogado que conhece o caminho para os Internets. Você poderia realmente fazer algo aqui. Dependendo de onde os sites são baseados, você pode pedir a um advogado que escreva um cessar e desistir ou seu equivalente em seu país. Você pode pelo menos assustar os bastardos.
Documente a inserção de seus valores fictícios. Insira valores fictícios que claramente (mas obscuramente) apontam para você. Eu acho que isso é uma prática comum com as empresas de lista telefônica e, aqui na Alemanha, acho que houve vários casos em que copiadores foram presos por meio de entradas falsas que eles copiaram 1: 1.
Seria uma pena se isso o levasse a estragar seu código HTML, arrastando o SEO, a validade e outras coisas (mesmo que um sistema de modelos que use uma estrutura HTML ligeiramente diferente em cada solicitação de páginas idênticas já possa ajudar bastante contra raspadores que sempre dependem de estruturas HTML e nomes de classe / ID para obter o conteúdo.)
Casos como este são para que servem as leis de direitos autorais. Rasgar o trabalho honesto de outras pessoas para ganhar dinheiro é algo com o qual você deve lutar.
fonte
Não há realmente nada que você possa fazer para evitar isso completamente. Os raspadores podem fingir seu agente de usuário, usar vários endereços IP etc. e aparecer como um usuário normal. A única coisa que você pode fazer é tornar o texto indisponível no momento em que a página é carregada - faça imagem, flash ou carregue com JavaScript. No entanto, as duas primeiras são más idéias e a última seria um problema de acessibilidade se o JavaScript não estiver ativado para alguns de seus usuários regulares.
Se eles estão absolutamente destruindo seu site e vasculhando todas as suas páginas, você pode fazer algum tipo de limitação de taxa.
Há alguma esperança embora. Os raspadores contam com os dados do seu site em um formato consistente. Se você pudesse randomizá-lo de alguma forma, poderia quebrar seu raspador. Coisas como alterar o ID ou o nome da classe dos elementos da página em cada carregamento, etc. Mas isso é muito trabalho a fazer e não tenho certeza se vale a pena. E mesmo assim, eles provavelmente poderiam contornar isso com dedicação suficiente.
fonte
Forneça uma API XML para acessar seus dados; de uma maneira simples de usar. Se as pessoas quiserem seus dados, eles os receberão, é melhor você se esforçar.
Dessa forma, você pode fornecer um subconjunto de funcionalidades de maneira eficaz, garantindo que, no mínimo, os raspadores não consumam solicitações HTTP e grandes quantidades de largura de banda.
Tudo o que você precisa fazer é convencer as pessoas que desejam que seus dados usem a API. ;)
fonte
Desculpe, é realmente muito difícil fazer isso ...
Eu sugiro que você educadamente peça que eles não usem seu conteúdo (se o seu conteúdo for protegido por direitos autorais).
Se for e eles não o derrubam, você pode agir com mais rapidez e enviar-lhes uma carta de cessar e desistir .
Geralmente, o que você faz para impedir a raspagem provavelmente terá um efeito mais negativo, por exemplo, acessibilidade, bots / aranhas, etc.
fonte
Ok, como dizem todas as postagens, se você quiser torná-lo fácil de usar, então os bots podem raspar com certeza.
Mas você ainda pode fazer algumas coisas, e isso pode afetar os 60-70% dos robôs de raspar.
Faça um script de verificação como abaixo.
Se um endereço IP específico estiver visitando muito rapidamente, depois de algumas visitas (5 a 10), coloque seu endereço IP + informações do navegador em um arquivo ou banco de dados.
O próximo passo
(Esse seria um processo em segundo plano e em execução o tempo todo ou agendado após alguns minutos.) Crie um script para continuar verificando esses endereços IP suspeitos.
Caso 1. Se o agente do usuário for de um mecanismo de pesquisa conhecido como Google, Bing , Yahoo (você pode encontrar mais informações sobre os agentes do usuário pesquisando no Google). Então você deve ver http://www.iplists.com/ . Esta lista e tente combinar padrões. E se parecer um agente de usuário falso, peça para preencher um CAPTCHA na próxima visita. (Você precisa pesquisar um pouco mais sobre os endereços IP dos bots. Sei que isso é possível e também tentar quem é o endereço IP. Pode ser útil.)
Caso 2. Nenhum agente usuário de um bot de pesquisa: basta pedir para preencher um CAPTCHA na próxima visita.
fonte
Resposta tardia - e também essa resposta provavelmente não é a que você deseja ouvir ...
Eu já escrevi muitas (muitas dezenas) de diferentes raspadores especializados em mineração de dados. (só porque gosto da filosofia de "dados abertos").
Aqui já existem muitos conselhos em outras respostas - agora vou desempenhar o papel de advogado do diabo e estender e / ou corrigir sua eficácia.
Primeiro:
Tentar usar algumas barreiras técnicas não valem os problemas causados:
HMTL simples - a maneira mais fácil é analisar as páginas HTML simples, com estrutura bem definida e classes css. Por exemplo, basta inspecionar o elemento com o Firebug e usar os caminhos Xpaths e / ou CSS corretos no meu raspador.
Você pode gerar dinamicamente a estrutura HTML e também gerar dinamicamente os nomes das classes CSS (e o próprio CSS também) (por exemplo, usando alguns nomes aleatórios de classe) - mas
Você não pode alterar a estrutura de todas as respostas, porque seus usuários regulares o odiarão. Além disso, isso causará mais problemas para você (manutenção) e não para o raspador. O caminho XPath ou CSS é determinável pelo script de raspagem automaticamente do conteúdo conhecido.
Ajax - um pouco mais difícil no começo, mas muitas vezes acelera o processo de raspagem :) - por quê?
Ao analisar as solicitações e respostas, apenas configurei meu próprio servidor proxy (escrito em perl) e meu firefox o está usando. Obviamente, porque é meu próprio proxy - está completamente oculto - o servidor de destino o vê como um navegador comum. (Portanto, não há X-Forwarded-for e cabeçalhos). Com base nos logs de proxy, é principalmente possível determinar a "lógica" das solicitações de ajax, por exemplo, eu poderia pular a maior parte da raspagem de html e usar apenas as respostas de ajax bem estruturadas (principalmente no formato JSON).
Então, o ajax não ajuda muito ...
Algumas mais complicadas são as páginas que usam muitas funções javascript compactadas .
Aqui é possível usar dois métodos básicos:
Essa raspagem é lenta (a raspagem é feita como no navegador normal), mas é
A filtragem baseada em agente do usuário não ajuda em nada. Qualquer minerador de dados sério o ajustará para um correto em seu raspador.
Exigir login - não ajuda. A maneira mais simples de vencer (sem qualquer análise e / ou script do protocolo de login) é apenas entrar no site como usuário comum, usando o Mozilla e depois executar o raspador do Mozrepl ...
Lembre-se de que o login requerido ajuda a bots anônimos, mas não ajuda contra quem deseja raspar seus dados. Ele apenas se registra no seu site como usuário comum.
Usar quadros também não é muito eficaz. Isso é usado por muitos serviços de filmes ao vivo e não é muito difícil de superar. Os quadros são simplesmente outras páginas HTML / Javascript que são necessárias para analisar ... Se os dados valem a pena, o minerador de dados faz a análise necessária.
A limitação baseada em IP não é eficaz - existem muitos servidores proxy públicos e também aqui é o TOR ... :) Não diminui a velocidade da raspagem (para alguém que realmente deseja seus dados).
Muito difícil é copiar dados ocultos nas imagens. (por exemplo, simplesmente convertendo os dados em imagens do lado do servidor). Empregar "tesseract" (OCR) ajuda muitas vezes - mas honestamente - os dados devem valer os problemas para o raspador. (que muitas vezes não vale a pena).
Por outro lado, seus usuários o odiarão por isso. Eu mesmo (mesmo quando não estou raspando) odeio sites que não permitem copiar o conteúdo da página para a área de transferência (porque as informações estão nas imagens ou (as tolas) tentando vincular com o botão direito do mouse em algum evento Javascript personalizado.: )
Os mais difíceis são os sites que usam miniaplicativos java ou flash , e o miniaplicativo usa solicitações https seguras internamente . Mas pense duas vezes - quão felizes serão os usuários do seu iPhone ...;). Portanto, atualmente, muito poucos sites os utilizam. Eu mesmo, bloqueando todo o conteúdo em flash no meu navegador (em sessões regulares de navegação) - e nunca usando sites que dependem do Flash.
Seus marcos podem ser ..., para que você possa tentar esse método - lembre-se - você provavelmente perderá alguns de seus usuários. Lembre-se de que alguns arquivos SWF são descompiláveis. ;)
O Captcha (os bons - como o reCaptcha) ajuda muito - mas seus usuários o odeiam ... - imagine como seus usuários o amarão quando precisarem resolver alguns captchas em todas as páginas que mostram informações sobre os artistas da música.
Provavelmente não precisa continuar - você já entrou em cena.
Agora o que você deve fazer:
Lembre-se: é quase impossível ocultar seus dados, se você do outro lado deseja publicá-los (de maneira amigável) para seus usuários regulares.
Assim,
Pense duas vezes antes de tentar usar algumas barreiras técnicas.
Em vez de tentar bloquear os mineradores de dados, basta adicionar mais esforços à usabilidade do seu site. Seu usuário vai te amar. O tempo (e energia) investido em barreiras técnicas geralmente não vale - é melhor gastar tempo para criar sites ainda melhores ...
Além disso, ladrões de dados não são como ladrões normais.
Se você comprar um alarme doméstico barato e adicionar um aviso "esta casa está conectada à polícia" - muitos ladrões nem tentam invadir a casa. Porque um movimento errado por ele - e ele vai para a cadeia ...
Então, você investe apenas alguns dólares, mas o ladrão investe e arrisca muito.
Mas o ladrão de dados não tem esses riscos. exatamente o oposto - se você fizer uma jogada errada (por exemplo, se você introduzir algum erro devido a barreiras técnicas), perderá seus usuários. Se o bot de raspagem não funcionar pela primeira vez, nada acontece - o minerador de dados apenas tentará outra abordagem e / ou depurará o script.
Nesse caso, você precisa investir muito mais - e o raspador investindo muito menos.
Basta pensar onde você quer investir seu tempo e energia ...
Ps: inglês não é meu nativo - então perdoe meu inglês quebrado ...
fonte
Do ponto de vista técnico: apenas modele o que o Google faz quando você os acessa com muitas consultas ao mesmo tempo. Isso deve acabar com muito disso.
Do ponto de vista jurídico: parece que os dados que você está publicando não são proprietários. Isso significa que você está publicando nomes, estatísticas e outras informações que não podem ter direitos autorais.
Se esse for o caso, os raspadores não violarão os direitos autorais ao redistribuir suas informações sobre o nome do artista etc. No entanto, eles podem estar violando os direitos autorais quando carregam seu site na memória, pois contém elementos com direitos autorais (como layout, etc.).
Eu recomendo ler sobre o Facebook v. Power.com e ver os argumentos que o Facebook usou para interromper a captura de tela. Existem várias maneiras legais de tentar impedir que alguém raspe seu site. Eles podem ser de grande alcance e imaginativos. Às vezes os tribunais compram os argumentos. Às vezes não.
Mas, supondo que você esteja publicando informações de domínio público que não são protegidas por direitos autorais, como nomes e estatísticas básicas ... você deve deixar isso em nome da liberdade de expressão e dos dados abertos. Ou seja, o que é a web.
fonte
Coisas que podem funcionar contra raspadores iniciantes:
Coisas que ajudarão em geral:
Coisas que ajudarão, mas farão com que seus usuários o odeiem:
fonte
Eu fiz várias raspagens na Web e resumi algumas técnicas para interromper os raspadores da Web no meu blog, com base no que acho irritante.
É uma troca entre seus usuários e raspadores. Se você limitar IP, usar CAPTCHA, exigir login, etc, você dificultará os raspadores. Mas isso também pode afastar seus usuários originais.
fonte
Infelizmente, sua melhor opção é manual: procure padrões de tráfego que você acredita serem indicativos de raspagem e banir seus endereços IP.
Como você está falando de um site público, tornar o site amigável ao mecanismo de pesquisa também tornará o site amigável. Se um mecanismo de pesquisa puder rastrear e raspar seu site, um raspador malicioso também poderá. É uma linha tênue para andar.
fonte
Claro que é possível. Para 100% de sucesso, coloque seu site offline.
Na realidade, você pode fazer algumas coisas que tornam a raspagem um pouco mais difícil. O Google faz verificações no navegador para garantir que você não seja um robô que raspa resultados de pesquisa (embora isso, como quase todo o resto, possa ser falsificado).
Você pode executar alguns segundos entre a primeira conexão com o site e os cliques subseqüentes. Não tenho certeza de qual seria o momento ideal ou exatamente como fazê-lo, mas isso é outra idéia.
Tenho certeza que existem várias outras pessoas que têm muito mais experiência, mas espero que essas idéias sejam pelo menos um pouco úteis.
fonte
Existem algumas coisas que você pode fazer para tentar impedir a raspagem da tela. Alguns não são muito eficazes, enquanto outros (um CAPTCHA) são, mas dificultam a usabilidade. Você também deve ter em mente que isso pode prejudicar os raspadores de sites legítimos, como os índices de mecanismos de pesquisa.
No entanto, suponho que, se você não deseja que ele seja raspado, significa que também não deseja que os mecanismos de pesquisa o indexem.
Aqui estão algumas coisas que você pode tentar:
Se eu tivesse que fazer isso, provavelmente usaria uma combinação dos três últimos, porque eles minimizam o inconveniente para usuários legítimos. No entanto, você deve aceitar que não poderá bloquear todo mundo dessa maneira e, assim que alguém descobrir como contornar isso, poderá raspar para sempre. Você pode tentar bloquear os endereços IP deles à medida que os descobrir, eu acho.
fonte
Não é a resposta que você provavelmente deseja, mas por que ocultar o que você está tentando tornar público?
fonte
Método 1 (somente sites pequenos):
sirva dados criptografados / codificados.
Eu escapei a Web usando python (urllib, solicitações, beautifulSoup etc ...) e encontrei muitos sites que servem dados criptografados / codificados que não são descriptografáveis em nenhuma linguagem de programação simplesmente porque o método de criptografia não existe.
Consegui isso em um site PHP criptografando e minimizando a saída (AVISO: isso não é uma boa ideia para sites grandes); a resposta sempre foi um conteúdo confuso.
Exemplo de como minimizar a saída no PHP ( Como minimizar a saída do hpml da página php? ):
Método 2:
Se você não pode impedi-los, estrague-os e sirva dados falsos / inúteis como resposta.
Método três:
bloquear agentes de usuário comuns de raspagem, você verá isso em sites grandes / grandes, pois é impossível raspar com "python3.4" como agente de usuário.
Método quatro:
verifique se todos os cabeçalhos dos usuários são válidos, às vezes forneço o maior número possível de cabeçalhos para fazer com que meu raspador pareça um usuário autêntico, alguns deles nem são verdadeiros ou válidos como en-FU :).
Aqui está uma lista de alguns dos cabeçalhos que eu normalmente forneço.
fonte
Em vez de colocar na lista negra os robôs, talvez você deva incluí-los na lista de permissões. Se você não deseja eliminar seus resultados de pesquisa para os poucos principais mecanismos, pode colocar na lista de permissões as sequências de agente de usuário, que geralmente são bem divulgadas. Os bots menos éticos tendem a forjar seqüências de agente de usuário de navegadores da web populares. Os principais mecanismos de pesquisa devem aumentar em 95% o seu tráfego.
A identificação dos robôs deve ser bastante direta, usando as técnicas sugeridas por outros pôsteres.
fonte
Uma abordagem rápida para isso seria definir uma armadilha de bobo / bot.
Faça uma página que, se for aberta uma certa quantidade de vezes ou mesmo aberta, coletará certas informações como o IP e outros enfeites (você também pode considerar irregularidades ou padrões, mas essa página não deve ter que ser aberta).
Crie um link para isso na sua página que esteja oculto com a exibição CSS: none; ou esquerda: -9999px; posição: absoluta; tente colocá-lo em locais com menos probabilidade de serem ignorados, como onde o conteúdo se encaixa e não no rodapé, pois às vezes os robôs podem optar por esquecer certas partes da página.
No seu arquivo robots.txt, defina várias regras de proibição para páginas que você não deseja que sejam robôs amigáveis (LOL, como se eles tivessem rostos felizes!) Para coletar informações e definir essa página como uma delas.
Agora, se um bot amigável aparecer, ele deverá ignorar essa página. Certo, mas isso ainda não é bom o suficiente. Faça mais algumas dessas páginas ou redirecione de alguma forma uma página para aceitar nomes diferentes. e, em seguida, coloque mais regras de proibição nessas páginas de interceptação no arquivo robots.txt ao lado das páginas que você deseja que sejam ignoradas.
Colete o IP desses bots ou de qualquer pessoa que entre nessas páginas, não os bane, mas crie uma função para exibir texto noodle no seu conteúdo, como números aleatórios, avisos de direitos autorais, sequências de texto específicas, imagens assustadoras, basicamente qualquer coisa para impedir seu bom conteúdo. Você também pode definir links que apontam para uma página que levará uma eternidade para carregar, ou seja. no php você pode usar a função sleep (). Isso combaterá o rastreador de volta se ele tiver algum tipo de detecção para ignorar as páginas que demoram muito para carregar, pois alguns bots bem escritos estão configurados para processar X quantidade de links por vez.
Se você criou sequências / frases de texto específicas, por que não ir ao seu mecanismo de pesquisa favorito e procurá-las, ele poderá mostrar onde seu conteúdo está terminando.
De qualquer forma, se você pensar taticamente e criativamente, esse poderia ser um bom ponto de partida. A melhor coisa a fazer seria aprender como um bot funciona.
Eu também pensaria em misturar alguns IDs ou a maneira como os atributos no elemento da página são exibidos:
que muda de forma sempre que alguns bots podem ser configurados para procurar padrões específicos em suas páginas ou elementos segmentados.
fonte
Você não pode parar a raspagem normal da tela. Para melhor ou para pior, é a natureza da web.
Você pode fazer isso para que ninguém possa acessar determinadas coisas (incluindo arquivos de música), a menos que estejam conectados como um usuário registrado. Não é muito difícil de fazer no Apache . Suponho que não seria muito difícil de fazer no IIS também.
fonte
Uma maneira seria veicular o conteúdo como atributos XML, seqüências de caracteres codificadas por URL, texto pré-formatado com JSON codificado em HTML ou URIs de dados e transformá-lo em HTML no cliente. Aqui estão alguns sites que fazem isso:
Skechers : XML
Chrome Web Store : JSON
Bing News : URL de dados
Protopage : Strings codificadas por URL
TiddlyWiki : Entidades HTML + JSON pré-formatado
Amazon : carregamento lento
XMLCalabash : XML com namespace, tipo MIME personalizado + extensão de arquivo personalizado
Se você visualizar a fonte em qualquer uma das opções acima, verá que a raspagem simplesmente retornará metadados e navegação.
fonte
A maioria já foi mencionada, mas você considerou a proteção do CloudFlare? Eu queria dizer isso:
Outras empresas provavelmente também fazem isso, o CloudFlare é o único que conheço.
Tenho certeza de que isso complicaria o trabalho deles. Uma vez, também fui banido de IP automaticamente por 4 meses quando tentei descartar dados de um site protegido pelo CloudFlare devido ao limite de taxa (usei um loop de solicitação simples AJAX).
fonte
Concordo com a maioria das postagens acima e gostaria de acrescentar que, quanto mais amigável for o mecanismo de pesquisa, maior será a capacidade de raspar. Você pode tentar fazer algumas coisas muito difusas que tornam mais difícil para os raspadores, mas também pode afetar sua capacidade de pesquisa ... Depende de quão bem você deseja que seu site seja classificado nos mecanismos de pesquisa, é claro.
fonte
Colocar seu conteúdo atrás de um captcha significaria que os robôs teriam dificuldade em acessar seu conteúdo. No entanto, os seres humanos seriam incomodados, o que pode ser indesejável.
fonte
Se você quiser ver um ótimo exemplo, consulte http://www.bkstr.com/ . Eles usam o algoritmo aj / s para definir um cookie e, em seguida, recarregam a página para que ele possa usá-lo para validar que a solicitação está sendo executada em um navegador. Um aplicativo de desktop criado para raspar definitivamente poderia passar por isso, mas impediria a maioria dos rasgos do tipo cURL.
fonte
Raspadores de tela funcionam processando HTML. E se eles estão determinados a obter seus dados, não há muito o que fazer tecnicamente, porque o globo ocular humano processa qualquer coisa. Legalmente, já foi apontado que você pode recorrer e essa seria minha recomendação.
No entanto, você pode ocultar a parte crítica dos seus dados usando a lógica de apresentação não baseada em HTML
Lembre-se de que isso provavelmente afetaria seus rankings de pesquisa.
fonte
Gere o HTML, CSS e JavaScript. É mais fácil escrever geradores do que analisadores, para que você possa gerar cada página exibida de maneira diferente. Você não pode mais usar um cache ou conteúdo estático.
fonte