Como evito a raspagem de sites? [fechadas]

301

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?

pixel
fonte
9
Você já pensou em tentar detectar o raspador deles através de IP ou similar (verifique seus logs) e apenas falsificar seus dados inteiramente para eles? Dessa forma, sim, eles "raspariam" o site, mas os "dados" deles seriam inúteis.
Lasse V. Karlsen
30
Lolcats de cabeça para baixo e texto invertido / embaralhado alguém?
Wayne Werner
2
pergunta semelhante stackoverflow.com/questions/2705394/…
user279521
7
Sendo discutido em meta
TJ Crowder 02/02
2
@JonasCz era brincadeira irônica. Triste coisa é proposta semelhante está incluída na sua resposta, embora criticada.
Tomáš Zato - Restabelece Monica

Respostas:

325

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 [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:

  • 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 articleIdsolicitem 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 divID 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-contentdiv 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-contenttornar algo semelhante div.a4c36dda13eaf0e 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 divdentro de um divque 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 divs 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.phpalgo 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 styleatributo 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:

JonasCz - Restabelecer Monica
fonte
11
Isso me trouxe aqui. Uma resposta bastante impressionante. Além disso, uma história de revisão bastante surpreendente. Obrigado pelo post. Você recebe um voto positivo. Não apenas por causa da quantidade de esforço investido nisso, mas porque é útil para mim.
DaveTheMinion
1
Ótima resposta! Aqui estão alguns pensamentos. A real browser will (almost always) request and download assets such as images and CSStambé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-proofnesstambém equilibre tempo / complexidade de programação versus benefício financeiro.
22416 Eric
5
@ JonH, se eles estiverem interessados, eles lerão. Além disso, dividi-o em parágrafos com títulos e subtítulos, para que as pessoas possam digitalizá-lo e ler as partes que desejam. Na verdade, existem algumas respostas igualmente longas no SO, e as pessoas as lêem.
JonasCz - Restabelece Monica 03/02
2
@ JoshCrozier - Eu acho que sites como esse não funcionam bem com tanta informação. Não estou dizendo que a informação está ruim.
JonH
2
PS: Minha impressão digital esteganográfica da idéia de conteúdo poderia ser usada em um tribunal. Imaginar o choque quando você provar que o possuidor de seus dados tem que partir de você, através das características únicas diretamente na dados ...
ErikE
241

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:

  1. Configure uma página /jail.html.
  2. Não permitir acesso à página robots.txt(para que as aranhas respeitosas nunca a visitem).
  3. Coloque um link em uma de suas páginas, ocultando-o com CSS ( display: none).
  4. Registre os endereços IP dos visitantes para /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.htmltodo 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.

Daniel Trebbien
fonte
48
Eu já vi essa técnica chamada "honeypot" antes. É uma técnica também usada na filtragem de spam, na qual você coloca um endereço de email em uma página, mas o oculta ou deixa claro que não é para as pessoas enviarem emails legítimos. Em seguida, colete o endereço IP de qualquer servidor de correio que entregue correio para esse endereço.
thomasrutter
12
Isso pressupõe que eles estejam rastreando links. A maioria dos raspadores tentará enviar para algum tipo de formulário e raspar os dados retornados.
Byron Whitlock
9
Eu vi honeypots baseados em Perl para email que têm links para outras "páginas" geradas pelo script Perl. Os bots legítimos que lêem robots.txt não olham para ele, e são ocultos aos usuários via CSS, mas os scrapers (ou coletores de email) são rapidamente capturados em uma árvore de páginas com profundidade infinita, todos com dados ruins. Coloque um link para o script logo no início de cada uma das suas páginas.
Stephen P
18
Outra coisa incrível para se divertir com os honeypots é a queima de gordura (ou tarpitting). Essa é uma técnica antiga que eu adoro - quando você identifica um bandido, leva o processo de spam / raspagem para um rastreamento, mantendo intencionalmente as conexões abertas pelo maior tempo possível fisicamente, sem tempo limite. Claro, isso pode alertá-los de que você também os conhece, mas caramba, é divertido. pt.wikipedia.org/wiki/Teergrubing
womp
11
O único problema com essa abordagem é se eu colocar [img] yoursite / jail.html [/ img] em um fórum popular. Você receberá toneladas de IP conectado ao seu sistema e será difícil filtrar qual é o pior. Se você deseja impedir esse tipo de coisa, você precisa adicionar um token associado ao IP na URL. Algo como jail.php? T = hoeyvm e no banco de dados você tem uma associação de hoeyvm e o IP que solicitou a página.
21710 HoLyVieR #
48

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.

Unicron
fonte
9
só funciona em países com estruturas legais sólidas.
TomL
3
Os advogados prosperam em conflitos - e lucram com isso. Raramente, se é que algum dia, um advogado o aconselhará a não ir a tribunal. Qualquer um que tenha lhe dirá que ganhar e perder não tem nada a ver com bons conceitos de 'justiça', mas com argumentos, humores e preconceitos no dia. Lembre-se de que se der errado, você poderá ser responsabilizado não apenas pelos custos do seu advogado, mas também pelas outras partes e se eles decidirem contra-processar - bem. Você pode facilmente perder sua casa e outros bens em sua vida. Não é uma aposta que eu sugeriria. Eu recomendo que você evite os tribunais a todo custo.
Frankie
3
Eu concordo com o @TomL. Se eles estão no Ocidente, é um tanto plausível. Mas se eles estiverem na Índia / China / Rússia / Ucrânia / o que for - então, seriamente, mínimo ou sem chance. Posso dizer sobre os tribunais russos: eles nem se incomodam em trabalhar com suas reivindicações.
Highstaker
35

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.

ryeguy
fonte
14
Criar um sistema que limite quantas páginas um IP pode exibir por minuto é um bom truque, pois os raspadores de tela percorrem o site muito mais rapidamente do que qualquer pessoa normal.
TravisO 01/07/10
Acordado. Os IPs custam dinheiro e são limitados pela maioria das empresas de hospedagem.
Tal Weiss
re: "Coisas como alterar o ID ou os nomes de classe dos elementos da página em cada carregamento, etc." Isso não é tão ruim se você criar um nome de classe via PHP e depois usar <div class = "<? Php echo $ myPHPGeneratedClassName;?>"> Você pode até usar seqüências aleatórias para torná-lo completamente exclusivo. Qualquer coisa que os impeça de encontrar padrões torna muito mais difícil analisar o DOM.
Niggles
Não é difícil encontrar um IP. Há muitos proxies, computadores amigos, computadores do trabalho, computadores da escola, computadores da biblioteca ...
Incognito
@ user257493: Verdade, mas estamos falando de alguém que está raspando dados aqui. Provavelmente, eles não estão indo para ir para que muito esforço apenas para dados de colheita. E, se o fizerem, você acabará com o fornecimento de IPs.
Ryeguy
31

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. ;)

Williham Totland
fonte
3
Isso parece muito razoável. É difícil impedir a raspagem de tela e, se você fornecer uma API, poderá impor algumas restrições, adicionar avisos ("Conteúdo de ----.com") e controlar basicamente quais dados são fornecidos.
Alecwh
6
@alecwh: e cobram pelo acesso!
André Caron
3
Eu concedi a você a recompensa, em parte porque a Web seria muito melhor se todos os sites fizessem isso. Vamos torcer para que isso se torne mais comum.
JonasCz - Restabelece Monica 03/02
1
Assim que você fazê-los se registrar para o serviço, eles vão voltar para o site normais
mplungjan
Eu sou uma dessas pessoas do lado oposto desta conversa. Crio modelos para espetáculos da Broadway e tenho que raspar todos os meus dados em vez de acessar com clareza.
Yaakov Bressler
22

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.

Lagarto
fonte
12

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.

Arshdeep
fonte
+1 Usando iplists.com é uma excelente ideia
Daniel Trebbien
10

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:

  • se alguém realmente quer seus dados
  • você não pode efetivamente (tecnicamente) ocultar seus dados
  • se os dados devem estar acessíveis ao público para seus "usuários regulares"

Tentar usar algumas barreiras técnicas não valem os problemas causados:

  • aos usuários regulares, piorando a experiência do usuário
  • para bots regulares e bem-vindos (mecanismos de pesquisa)
  • etc ...

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ê deseja apresentar as informações aos seus usuários regulares de maneira consistente
  • por exemplo, novamente - basta analisar a estrutura da página mais uma vez para configurar o raspador.
  • e isso pode ser feito automaticamente, analisando alguns "conteúdos já conhecidos"
    • uma vez que alguém já saiba (por raspar anteriormente), por exemplo:
    • o que contém as informações sobre "phil collins"
    • basta exibir a página "phil collins" e (automaticamente) analisar como a página está estruturada "hoje" :)

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:

  • descompacte e entenda o JS e crie um raspador que siga a lógica Javascript (da maneira mais difícil)
  • ou (de preferência usando sozinho) - apenas usando o Mozilla com Mozrepl para raspar. Por exemplo, a raspagem real é feita em um navegador habilitado para javascript com todos os recursos, que é programado para clicar nos elementos certos e apenas pegar as respostas "decodificadas" diretamente da janela do navegador.

Essa raspagem é lenta (a raspagem é feita como no navegador normal), mas é

  • Muito fácil de configurar e usar
  • e é quase impossível combatê-lo :)
  • e a "lentidão" é necessária de qualquer maneira para combater o "bloqueio rápido dos mesmos pedidos baseados em IP"

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,

  • torne seus dados facilmente acessíveis - por alguma API
    • isso permite o fácil acesso aos dados
    • por exemplo, descarregue o servidor da raspagem - bom para você
  • configurar os direitos de uso corretos (por exemplo, deve citar a fonte)
  • lembre-se: muitos dados não têm direitos autorais - e são difíceis de protegê-los
  • adicione alguns dados falsos (como você já fez) e use ferramentas legais
    • como outros já disseram, envie uma "carta de cessação e desistência"
    • outras ações legais (processar e similares) provavelmente são muito caras e difíceis de vencer (especialmente contra sites fora dos EUA)

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 ...

jm666
fonte
@Parapluie Você realmente deve ler sobre o conteúdo gratuito e / ou sobre o modelo de código aberto - sobre datas, história, objetivos e ética. E, especialmente, sobre o Open Data - para o qual eu criei a maioria dos meus raspadores ...
jm666
Eu entendo o conceito, apesar de agradecer por suas recomendações eruditas. Poderíamos ter tido uma conversa interessante sobre isso; mas parece que meu comentário original foi excluído por terceiros. E então, somos realmente livres afinal?
Parapluie
8

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.

dengeltrees
fonte
1
Mesmo que você não consiga proteger os direitos autorais das informações, você pode definitivamente colocar uma cláusula contra a raspagem nos termos de uso. Em seguida, envie uma carta de cessação e desistência por violação dos termos de uso.
André Caron
1
Liberdade de expressão e dados abertos são, de fato, o espírito da Internet!
Ciara3
Sim, liberdade de expressão e tudo isso. Porém, os raspadores podem estar desperdiçando uma quantidade significativa do orçamento ou da largura de banda do OP, além de copiar dados não com direitos autorais.
jpaugh
8

Coisas que podem funcionar contra raspadores iniciantes:

  • Bloqueio de IP
  • use muito ajax
  • verifique o cabeçalho da solicitação de referência
  • requer login

Coisas que ajudarão em geral:

  • mude seu layout toda semana
  • robots.txt

Coisas que ajudarão, mas farão com que seus usuários o odeiem:

  • CAPTCHA
pguardiario
fonte
8

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.

hoju
fonte
8

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.

STW
fonte
4
O bloqueio de IP reduzirá a velocidade do raspador, mas também é muito trabalhoso para o seu servidor. Digamos que eu raspe você com 1000 proxies, ainda tenho os dados que quero e agora seu firewall está uma bagunça.
pguardiario 22/06
1
Quando você fizer isso, eles serão horizontais em você. 100000 endereços custa hoje nada para eles, mas retarda o seu site se você tentar banir todos eles - e eles vão girar os IPs não visitar mais de uma vez ou duas vezes
mplungjan
6

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.

Wayne Werner
fonte
6

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:

  • Mostre o texto em uma imagem. Isso é bastante confiável e é menos trabalhoso para o usuário do que um CAPTCHA, mas significa que eles não serão capazes de recortar e colar e não serão dimensionados com facilidade ou estarão acessíveis.
  • Use um CAPTCHA e exija que seja concluído antes de retornar a página. Este é um método confiável, mas também a maior dor a impor ao usuário.
  • Exija que o usuário se inscreva em uma conta antes de visualizar as páginas e confirme o endereço de email. Isso será bastante eficaz, mas não totalmente - um raspador de tela pode configurar uma conta e programar seu script de maneira inteligente para fazer login.
  • Se a sequência de agente do usuário do cliente estiver vazia, bloqueie o acesso. Um script de raspagem de site geralmente é programado com preguiça e não define uma sequência de agente do usuário, enquanto todos os navegadores da Web o fazem.
  • Você pode configurar uma lista negra de seqüências conhecidas de agente de usuário do raspador de tela à medida que as descobre. Mais uma vez, isso só ajudará os codificados preguiçosamente; um programador que sabe o que está fazendo pode definir uma sequência de agente do usuário para representar um navegador da web.
  • Mude o caminho da URL frequentemente. Quando você o altera, verifique se o antigo continua funcionando, mas apenas enquanto um usuário tiver o navegador aberto. Torne difícil prever qual será o novo caminho da URL. Isso dificultará o acesso dos scripts, se o URL for codificado. Seria melhor fazer isso com algum tipo de script.

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.

thomasrutter
fonte
6
  1. Não, não é possível parar (de qualquer forma)
  2. Abrace-o. Por que não publicar como RDFa e tornar-se super amigável aos mecanismos de pesquisa e incentivar a reutilização de dados? As pessoas agradecerão e fornecerão o crédito no vencimento (veja o musicbrainz como exemplo).

Não é a resposta que você provavelmente deseja, mas por que ocultar o que você está tentando tornar público?

nathan
fonte
5

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? ):

<?php
  function sanitize_output($buffer) {
    $search = array(
      '/\>[^\S ]+/s', // strip whitespaces after tags, except space
      '/[^\S ]+\</s', // strip whitespaces before tags, except space
      '/(\s)+/s'      // shorten multiple whitespace sequences
    );
    $replace = array('>', '<', '\\1');
    $buffer = preg_replace($search, $replace, $buffer);
    return $buffer;
  }
  ob_start("sanitize_output");
?>

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.

headers = {
  "Requested-URI": "/example",
  "Request-Method": "GET",
  "Remote-IP-Address": "656.787.909.121",
  "Remote-IP-Port": "69696",
  "Protocol-version": "HTTP/1.1",
  "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  "Accept-Encoding": "gzip,deflate",
  "Accept-Language": "en-FU,en;q=0.8",
  "Cache-Control": "max-age=0",
  "Connection": "keep-alive",
  "Dnt": "1",  
  "Host": "http://example.com",
  "Referer": "http://example.com",
  "Upgrade-Insecure-Requests": "1",
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
}
Comunidade
fonte
2

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.

Chris
fonte
2

Uma abordagem rápida para isso seria definir uma armadilha de bobo / bot.

  1. 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).

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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:

<a class="someclass" href="../xyz/abc" rel="nofollow" title="sometitle"> 

que muda de forma sempre que alguns bots podem ser configurados para procurar padrões específicos em suas páginas ou elementos segmentados.

<a title="sometitle" href="../xyz/abc" rel="nofollow" class="someclass"> 

id="p-12802" > id="p-00392"
Steve Chan
fonte
1
Você não quer apenas bani-los, você quer se ferrar completamente com eles ... EU AMO!
Zoidberg
O banimento furtivo é exatamente o que eu estava pensando (também conhecido como banimento das sombras, banimento do inferno).
ErikE
1

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.

Dinah
fonte
1

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

    <document 
     filename="" 
     height="" 
     width="" 
     title="SKECHERS" 
     linkType="" 
     linkUrl="" 
     imageMap="" 
     href=&quot;http://www.bobsfromskechers.com&quot; 
     alt=&quot;BOBS from Skechers&quot; 
     title=&quot;BOBS from Skechers&quot; 
    />
  • Chrome Web Store : JSON

    <script type="text/javascript" src="https://apis.google.com/js/plusone.js">{"lang": "en", "parsetags": "explicit"}</script>
  • Bing News : URL de dados

    <script type="text/javascript">
      //<![CDATA[
      (function()
        {
        var x;x=_ge('emb7');
        if(x)
          {
          x.src='data:image/jpeg;base64,/*...*/';
          } 
        }() )
  • Protopage : Strings codificadas por URL

    unescape('Rolling%20Stone%20%3a%20Rock%20and%20Roll%20Daily')
  • TiddlyWiki : Entidades HTML + JSON pré-formatado

       <pre>
       {&quot;tiddlers&quot;: 
        {
        &quot;GettingStarted&quot;: 
          {
          &quot;title&quot;: &quot;GettingStarted&quot;,
          &quot;text&quot;: &quot;Welcome to TiddlyWiki,
          }
        }
       }
       </pre>
  • Amazon : carregamento lento

    amzn.copilot.jQuery=i;amzn.copilot.jQuery(document).ready(function(){d(b);f(c,function() {amzn.copilot.setup({serviceEndPoint:h.vipUrl,isContinuedSession:true})})})},f=function(i,h){var j=document.createElement("script");j.type="text/javascript";j.src=i;j.async=true;j.onload=h;a.appendChild(j)},d=function(h){var i=document.createElement("link");i.type="text/css";i.rel="stylesheet";i.href=h;a.appendChild(i)}})();
    amzn.copilot.checkCoPilotSession({jsUrl : 'http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cs-copilot-customer-js/cs-copilot-customer-js-min-1875890922._V1_.js', cssUrl : 'http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cs-copilot-customer-css/cs-copilot-customer-css-min-2367001420._V1_.css', vipUrl : 'https://copilot.amazon.com'
  • XMLCalabash : XML com namespace, tipo MIME personalizado + extensão de arquivo personalizado

       <p:declare-step type="pxp:zip">
            <p:input port="source" sequence="true" primary="true"/>
            <p:input port="manifest"/>
            <p:output port="result"/>
            <p:option name="href" required="true" cx:type="xsd:anyURI"/>
            <p:option name="compression-method" cx:type="stored|deflated"/>
            <p:option name="compression-level" cx:type="smallest|fastest|default|huffman|none"/>
            <p:option name="command" select="'update'" cx:type="update|freshen|create|delete"/>
       </p:declare-step>

Se você visualizar a fonte em qualquer uma das opções acima, verá que a raspagem simplesmente retornará metadados e navegação.

Paul Sweatte
fonte
Então ... essa abordagem torna a raspagem ainda mais fácil, pois o conteúdo agora está em um formato uniforme. Na verdade, não seria mais chamado de raspagem : é chamado de análise e é realmente muito fácil de fazer programaticamente.
jpaugh
1

A maioria já foi mencionada, mas você considerou a proteção do CloudFlare? Eu queria dizer isso:

Descrição da imagem

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).

Tomáš Zato - Restabelecer Monica
fonte
1

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.

sjobe
fonte
0

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.

SorcyCat
fonte
0

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.

blacktie24
fonte
0

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

  • Gere um arquivo Flash para cada artista / álbum etc.
  • Gere uma imagem para cada conteúdo do artista. Talvez apenas uma imagem para o nome do artista etc. seja suficiente. Faça isso renderizando o texto em um arquivo JPEG / PNG no servidor e vinculando a essa imagem.

Lembre-se de que isso provavelmente afetaria seus rankings de pesquisa.

James Westgate
fonte
0

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.

Stephan Eggermont
fonte