Nesta publicação irá aprender:
O que é um agente de usuário?
O termo refere-se a qualquer peça de software que facilite a interação do usuário final com o conteúdo da web. Uma cadeia de agente de usuário (UA) é um texto que o software do computador do cliente envia através de um pedido.
A cadeia de agente de usuário ajuda o servidor de destino a identificar qual navegador, tipo de dispositivo, e sistema operativo está a ser utilizado. Por exemplo, a cadeia diz ao servidor que está a utilizar o navegador Chrome e o Windows 10 no seu computador. O servidor pode então utilizar esta informação para ajustar a resposta para o tipo de dispositivo, SO e navegador.
A maioria dos navegadores envia um cabeçalho de agente de usuário no seguinte formato, embora não haja muita consistência na forma como os agentes de usuário são escolhidos:
Cada navegador adiciona os seus próprios componentes de comentário, tais como plataforma ou versão de lançamento (RV, por sua sigla em inglês). Mozilla oferece exemplos de cadeias a serem utilizadas por rastreadores:
Pode saber mais sobre as diferentes cadeias de caracteres que pode utilizar para o navegador Mozilla no seu “>sítio para programadores.
Abaixo pode encontrar exemplos do sítio de desenvolvimento de Chrome de como o formato de cadeia de UA procura diferentes dispositivos e navegadores:
Chrome para Android
UA de Telefone:
UA de Tablet:
Porque deve utilizar um agente de usuário?
Quando se está a raspar a web, por vezes verá que o servidor da web bloqueia certos agentes de usuário. Isto deve-se principalmente ao facto de identificar a origem como um bot, e certos sítios web não permitem bots rastreadores nem raspadores. Os sítios web mais sofisticados fazem isto ao contrário, ou seja, só permitem agentes de usuário que pensam ser válidos para realizar trabalhos de rastejamento. Os realmente sofisticados verificam se o comportamento do navegador corresponde realmente ao do agente de usuário que declara ser.
Pode pensar que a solução correta seria não incluir um agente de usuário nos seus pedidos. No entanto, isto faz com que as ferramentas utilizem um UA por defeito. Em muitos casos, o servidor web de destino o tem numa lista negra e o bloqueia.
Então, como assegurar que o seu agente de usuário não seja banido?
Dicas para evitar que o seu UA seja banido ao fazer raspagem:
#1: Utilizar um agente de usuário real
Se o seu agente de usuário não pertencer a um grande navegador, alguns sítios web irão bloquear os seus pedidos. Muitos raspadores da web baseados em bot saltam a etapa de definir um UA, com a consequência de serem detetados e banidos por falharem o UA errado/por defeito.
Pode evitar este problema definindo um UA amplamente utilizado para o seu rastejador da web. Pode encontrar uma grande lista de agentes de usuário populares aqui. É possível compilar uma lista de cadeias de caracteres populares e alterná-las executando um pedido cURL para um sítio web. No entanto, recomendamos a utilização do agente de usuário do seu navegador porque é mais provável que o comportamento do seu navegador corresponda ao que se espera do agente de usuário, se não o alterar demasiado.
#2: Rotar os agentes de usuário
Quando faz numerosos pedidos durante a raspagem da web, deve aleatorizá-los. Isto irá minimizar a possibilidade do servidor web identificar e bloquear os seus UAs.
Como é que os pedidos são aleatorizados?
Uma solução seria alterar o endereço IP da solicitação usando proxies rotativos. Desta forma, envia um conjunto diferente de cabeçalhos cada vez. No lado do servidor web, parecerá que o pedido vem de diferentes computadores e diferentes navegadores.
Dica profissional: Um agente de usuário é um cabeçalho, mas os cabeçalhos incluem muito mais do que apenas agentes de usuário. Não se pode enviar apenas cabeçalhos aleatórios, é preciso certificar-se de que o agente de usuário que envia corresponde aos cabeçalhos que está a enviar.
Pode utilizar botcheck.luminatio.io para verificar se os cabeçalhos que está a enviar correspondem ao que se espera do agente de usuário.
Como rotar os agentes de usuário
Em primeiro lugar, é necessário coletar uma lista de cadeias de agentes de usuário. Recomendamos o uso de cadeias de navegadores reais, que podem ser encontradas aqui. O próximo passo é adicionar as cadeias a uma Lista de Python. E finalmente, definir que cada pedido escolha uma cadeia aleatória da lista.
Você pode ver um exemplo de como alternar os agentes de usuário usando Python 3 e Selenium 4 nesta discussão de Stack Overflow. O exemplo do código é semelhante a este:
Seja qual for o programa ou método que escolher para rotar os seus cabeçalhos de UA, deve seguir as mesmas técnicas para evitar ser detetado e bloqueado:
- #1: Rotar um conjunto completo de cabeçalhos que estão associados a cada UA
- #2: Enviar cabeçalhos no pedido que um verdadeiro navegador normalmente faria
- #3: Utilizar a página anterior que visitou como ‘cabeçalho de referência’
Dica profissional: É necessário certificar-se de que o endereço IP e os cookies não mudam quando se utiliza um cabeçalho de referência. O ideal seria visitar a página anterior para que houvesse um registo do mesmo no seu servidor alvo.
#3: Rotar os agentes de utilização utilizando um Proxy
Você pode evitar a dor de cabeça e o incômodo de ter de definir listas e IPs rotativos manualmente usando uma rede proxy rotativa. Os Proxies têm a capacidade de configurar a rotação automática de IPs e a rotação de cadeias de caracteres de UA. Isto significa que os seus pedidos parecem ter tido origem numa variedade de navegadores web. Isto diminui severamente os bloqueios e aumenta as taxas de sucesso à medida que os pedidos parecem ter sido originados por usuários reais da web. Tenha em mente que apenas os proxies muito específicos que empregam a tecnologia de desbloqueio de dados têm a capacidade de gerir e rotar corretamente os seus agentes de usuário.
Lista de Usuários-Agentes para raspagem
Existe uma grande variedade de Usuários-Agentes baseados em navegador/telefone/dispositivo/bot/motor de pesquisa/ferramenta de desenvolvimento que podem ser utilizados para emular vários navegadores enquanto se utilizam ferramentas tais como wget e cURL. Estes incluem:
- Lynx: Lynx/2.8.8pre.4 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.23
- Wget: Wget/1.15 (linux-gnu)
- Curl: curl/7.35.0
- HTC: Mozilla/5.0 (Linux; Android 7.0; HTC 10 Build/NRD90M) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36
- Google Nexus: Mozilla/5.0 (Linux; U; Android-4.0.3; en-us; Galaxy Nexus Build/IML74K) AppleWebKit/535.7 (KHTML, como Gecko) CrMo/16.0.912.75 Mobile Safari/535.7
- Samsung Galaxy Note 4: Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-N910F Build/MMB29M) AppleWebKit/537.36 (KHTML, como Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36
- Samsung Galaxy Note 3: Mozilla/5.0 (Linux; Android 5.0; SAMSUNG SM-N900 Build/LRX21V) AppleWebKit/537.36 (KHTML, como Gecko) SamsungBrowser/2.1 Chrome/34.0.1847.76 Mobile Safari/537.36
- Samsung Phone: Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-G570Y Build/MMB29K) AppleWebKit/537.36 (KHTML, como Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36
- Bot do motor de busca do Bing: Mozilla/5.0 (compatível; bingbot/2.0; +http://www.bing.com/bingbot.htm)
- Bot do motor de busca do Google: Mozilla/5.0 (compatível; Googlebot/2.1; +http://www.google.com/bot.html)
- iPhone da Apple: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 como Mac OS X) AppleWebKit/603.1.30 (KHTML, como Gecko) Version/10.0 Mobile/14E304 Safari/602.1
- iPad da Apple: Mozilla/5.0 (iPad; CPU OS 8_4_1 como Mac OS X) AppleWebKit/600.1.4 (KHTML, como Gecko) Version/8.0 Mobile/12H321 Safari/600.1.4
- Microsoft Internet Explorer 11 / IE 11: Mozilla/5.0 (compatível, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) como Gecko
- Microsoft Internet Explorer 10 / IE 10: Mozilla/5.0 (compatível; MSIE 10.0; Windows NT 6.2; Trident/6.0; MDDCJS)
- Microsoft Internet Explorer 9 / IE 9: Mozilla/5.0 (compatível; MSIE 9.0; Windows NT 6.0; Trident/5.0; Trident/5.0)
- Microsoft Internet Explorer 8 / IE 8: Mozilla/4.0 (compatível; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
- Microsoft Internet Explorer 7 / IE 7: Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)
- Microsoft Internet Explorer 6 / IE 6: Mozilla/4.0 (compatível; MSIE 6.0; Windows NT 5.1; SV1)
- Microsoft Edge: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393
- Mozilla Firefox: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0
- Google Chrome: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/58.0.3029.110 Safari/537.36
O resultado
Uma vez que a maioria dos pedidos de bloqueio de sítios web não tem um agente de usuário de navegador válido ou reconhecível, aprender como rotar corretamente o UA é importante para evitar bloqueios de sítios web. Utilizar o agente de usuário correto dirá ao seu sítio web alvo que o seu pedido veio de uma origem válida, permitindo-lhe coletar livremente os dados dos seus sítios alvo desejados.
A Bright Data desenvolveu uma solução de desbloqueio de dados totalmente automatizada que poupa tempo e recursos às equipas, utilizando algoritmos de aprendizagem de máquinas para gerar agentes de usuário de navegador específicos para o sítio, bem como contornar sistemas de deteção de bot.