Uma boa compreensão da Internet requer muito conhecimento. Vamos fazer uma breve introdução a todos os termos de que precisa para compreender melhor o web scraping.
O HTTP, ou Protocolo de Transferência de Hipertexto, é a base de qualquer troca de dados na Web. Como o nome sugere, o HTTP é uma convenção cliente-servidor. Um cliente HTTP, como um navegador da Web, abre uma ligação a um servidor HTTP e envia uma mensagem, do tipo: «Olá! Como vai isso? Importas-te de me passar essas imagens?». O servidor normalmente oferece uma resposta, como o código HTML, e encerra a ligação.
Digamos que precisa de visitar o Google. Se digitar o endereço no navegador da Web e premir Enter, o cliente HTTP (o navegador) enviará a seguinte mensagem ao servidor:
GET / HTTP/1.1
Host: google.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/web\p,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Connection: keep-aliveUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
A primeira linha da mensagem contém o método de pedido (GET), o caminho para o qual fizemos o pedido (no nosso caso é apenas '/' porque apenas acedemos a www.google.com), a versão do protocolo HTTP e vários cabeçalhos, como Connection ou User-Agent.
Vamos falar sobre os campos de cabeçalho mais importantes para o processo:
- Host: O nome de domínio do servidor ao qual acedeu depois de digitar o endereço no navegador da Web e pressionar Enter.
- User-Agent: Aqui podemos ver detalhes relativos ao cliente que efetuou a solicitação. Eu uso um MacBook, como pode ver na parte __(Macintosh; Intel Mac OS X 10_11_6)__, e o Chrome como navegador da Web __(Chrome/56.0.2924.87)__.
- Accept: Ao utilizar este cabeçalho, o cliente restringe o servidor a enviar-lhe apenas determinados tipos de respostas, como application/JSON ou text/plain.
- Referrer: Este campo de cabeçalho contém o endereço da página que está a fazer o pedido. Os sites utilizam este cabeçalho para alterar o seu conteúdo com base na origem do utilizador.
Uma resposta do servidor pode ter o seguinte aspeto:
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu) Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>The content of the document</body>
</html>
Como pode ver, na primeira linha está o código de resposta HTTP: **200 OK. Isto significa que a ação de scraping foi bem-sucedida.
Agora, se tivéssemos enviado a solicitação usando um navegador da Web, ele teria analisado o código HTML, obtido todos os outros recursos, como CSS, arquivos JavaScript e imagens, e renderizado a versão final da página da Web. Nas etapas abaixo, vamos tentar automatizar esse processo.