Legalidade de Web Scraping

Com Python, podemos raspar qualquer site ou elementos específicos de uma página da web, mas você tem alguma ideia se isso é legal ou não? Antes de copiar qualquer site da Web, devemos saber sobre a legalidade da cópia da web. Este capítulo irá explicar os conceitos relacionados à legalidade do web scraping.

Introdução

Geralmente, se você for usar os dados copiados para uso pessoal, pode não haver nenhum problema. Mas se você vai republicar esses dados, antes de fazer o mesmo, você deve fazer uma solicitação de download ao proprietário ou fazer alguma pesquisa de fundo sobre as políticas e também sobre os dados que você vai extrair.

Pesquisa necessária antes da raspagem

Se você tem como alvo um site para extrair dados dele, precisamos entender sua escala e estrutura. A seguir estão alguns dos arquivos que precisamos analisar antes de iniciar o web scraping.

Analisando robots.txt

Na verdade, a maioria dos editores permite que os programadores rastreiem seus sites até certo ponto. Em outro sentido, os editores desejam que partes específicas dos sites sejam rastreadas. Para definir isso, os sites devem colocar algumas regras para declarar quais partes podem ser rastreadas e quais não podem. Essas regras são definidas em um arquivo chamadorobots.txt.

robots.txté um arquivo legível por humanos usado para identificar as partes do site que os rastreadores têm ou não podem raspar. Não existe um formato padrão de arquivo robots.txt e os editores do site podem fazer modificações de acordo com suas necessidades. Podemos verificar o arquivo robots.txt de um determinado site fornecendo uma barra e um robots.txt após o url desse site. Por exemplo, se quisermos verificar o Google.com, precisamos digitarhttps://www.google.com/robots.txt e obteremos algo da seguinte forma -

User-agent: *
Disallow: /search
Allow: /search/about
Allow: /search/static
Allow: /search/howsearchworks
Disallow: /sdch
Disallow: /groups
Disallow: /index.html?
Disallow: /?
Allow: /?hl=
Disallow: /?hl=*&
Allow: /?hl=*&gws_rd=ssl$
and so on……..

Algumas das regras mais comuns definidas no arquivo robots.txt de um site são as seguintes -

User-agent: BadCrawler
Disallow: /

A regra acima significa que o arquivo robots.txt solicita a um rastreador BadCrawler agente do usuário não rastrear seu site.

User-agent: *
Crawl-delay: 5
Disallow: /trap

A regra acima significa que o arquivo robots.txt atrasa um rastreador por 5 segundos entre as solicitações de download para todos os agentes de usuário para evitar sobrecarregar o servidor. o/traplink tentará bloquear rastreadores maliciosos que seguem links não permitidos. Existem muitas outras regras que podem ser definidas pelo editor do site de acordo com seus requisitos. Alguns deles são discutidos aqui -

Analisando arquivos de Sitemap

O que você deve fazer se quiser rastrear um site para obter informações atualizadas? Você rastreará todas as páginas da web para obter essas informações atualizadas, mas isso aumentará o tráfego do servidor desse site em particular. É por isso que os sites fornecem arquivos de mapa do site para ajudar os rastreadores a localizar o conteúdo atualizado sem a necessidade de rastrear todas as páginas da web. O padrão do Sitemap é definido emhttp://www.sitemaps.org/protocol.html.

Conteúdo do arquivo de Sitemap

A seguir está o conteúdo do arquivo de mapa do site de https://www.microsoft.com/robots.txt que é descoberto no arquivo robots.txt -

Sitemap: https://www.microsoft.com/en-us/explore/msft_sitemap_index.xml
Sitemap: https://www.microsoft.com/learning/sitemap.xml
Sitemap: https://www.microsoft.com/en-us/licensing/sitemap.xml
Sitemap: https://www.microsoft.com/en-us/legal/sitemap.xml
Sitemap: https://www.microsoft.com/filedata/sitemaps/RW5xN8
Sitemap: https://www.microsoft.com/store/collections.xml
Sitemap: https://www.microsoft.com/store/productdetailpages.index.xml
Sitemap: https://www.microsoft.com/en-us/store/locations/store-locationssitemap.xml

O conteúdo acima mostra que o mapa do site lista os URLs no site e permite ainda que um webmaster especifique algumas informações adicionais, como data da última atualização, mudança de conteúdo, importância do URL em relação aos outros etc. sobre cada URL.

Qual é o tamanho do site?

O tamanho de um site, ou seja, o número de páginas de um site afeta a maneira como fazemos o rastreamento? Certamente sim. Porque se tivermos menos número de páginas da web para rastrear, então a eficiência não seria um problema sério, mas suponha que se nosso site tiver milhões de páginas da web, por exemplo Microsoft.com, o download de cada página da web sequencialmente levaria vários meses e então a eficiência seria uma preocupação séria.

Verificando o tamanho do site

Ao verificar o tamanho do resultado do crawler do Google, podemos ter uma estimativa do tamanho de um site. Nosso resultado pode ser filtrado usando a palavra-chavesiteao fazer a pesquisa no Google. Por exemplo, estimar o tamanho dehttps://authoraditiagarwal.com/ é dado abaixo -

Você pode ver que há cerca de 60 resultados, o que significa que não é um grande site e que o rastreamento não levaria ao problema de eficiência.

Qual tecnologia é usada pelo site?

Outra questão importante é se a tecnologia usada pelo site afeta a maneira como rastreamos. Sim, afeta. Mas como podemos verificar a tecnologia utilizada por um site? Existe uma biblioteca Python chamadabuiltwith com a ajuda do qual podemos conhecer a tecnologia utilizada por um site.

Exemplo

Neste exemplo, vamos verificar a tecnologia usada pelo site https://authoraditiagarwal.com com a ajuda da biblioteca Python builtwith. Mas antes de usar esta biblioteca, precisamos instalá-la da seguinte maneira -

(base) D:\ProgramData>pip install builtwith
Collecting builtwith
   Downloading
https://files.pythonhosted.org/packages/9b/b8/4a320be83bb3c9c1b3ac3f9469a5d66e0
2918e20d226aa97a3e86bddd130/builtwith-1.3.3.tar.gz
Requirement already satisfied: six in d:\programdata\lib\site-packages (from
builtwith) (1.10.0)
Building wheels for collected packages: builtwith
   Running setup.py bdist_wheel for builtwith ... done
   Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\2b\00\c2\a96241e7fe520e75093898b
f926764a924873e0304f10b2524
Successfully built builtwith
Installing collected packages: builtwith
Successfully installed builtwith-1.3.3

Agora, com a ajuda de seguir uma linha simples de códigos, podemos verificar a tecnologia usada por um determinado site -

In [1]: import builtwith
In [2]: builtwith.parse('http://authoraditiagarwal.com')
Out[2]:
{'blogs': ['PHP', 'WordPress'],
   'cms': ['WordPress'],
   'ecommerce': ['WooCommerce'],
   'font-scripts': ['Font Awesome'],
   'javascript-frameworks': ['jQuery'],
   'programming-languages': ['PHP'],
   'web-servers': ['Apache']}

Quem é o dono do site?

O proprietário do site também é importante porque, se o proprietário for conhecido por bloquear os rastreadores, os rastreadores devem ter cuidado ao copiar os dados do site. Existe um protocolo chamadoWhois com a ajuda de que podemos descobrir mais sobre o dono do site.

Exemplo

Neste exemplo, vamos verificar o proprietário do site, digamos, microsoft.com, com a ajuda de Whois. Mas antes de usar esta biblioteca, precisamos instalá-la da seguinte maneira -

(base) D:\ProgramData>pip install python-whois
Collecting python-whois
   Downloading
https://files.pythonhosted.org/packages/63/8a/8ed58b8b28b6200ce1cdfe4e4f3bbc8b8
5a79eef2aa615ec2fef511b3d68/python-whois-0.7.0.tar.gz (82kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 92kB 164kB/s
Requirement already satisfied: future in d:\programdata\lib\site-packages (from
python-whois) (0.16.0)
Building wheels for collected packages: python-whois
   Running setup.py bdist_wheel for python-whois ... done
   Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\06\cb\7d\33704632b0e1bb64460dc2b
4dcc81ab212a3d5e52ab32dc531
Successfully built python-whois
Installing collected packages: python-whois
Successfully installed python-whois-0.7.0

Agora, com a ajuda de seguir uma linha simples de códigos, podemos verificar a tecnologia usada por um determinado site -

In [1]: import whois
In [2]: print (whois.whois('microsoft.com'))
{
   "domain_name": [
      "MICROSOFT.COM",
      "microsoft.com"
   ],
   -------
   "name_servers": [
      "NS1.MSFT.NET",
      "NS2.MSFT.NET",
      "NS3.MSFT.NET",
      "NS4.MSFT.NET",
      "ns3.msft.net",
      "ns1.msft.net",
      "ns4.msft.net",
      "ns2.msft.net"
   ],
   "emails": [
      "[email protected]",
      "[email protected]",
      "[email protected]",
      "[email protected]"
   ],
}