1. Tecnologias anti-bot: quem está jogando gato e rato com a gente?
Hoje vamos mergulhar em um dos temas mais interessantes e, dá pra dizer, polêmicos do web scraping — burlar proteção contra bots e lutar contra o CAPTCHA. Como costuma acontecer na vida de um programador, para cada parafuso complicado, existem porcas de rosca inversa, então bora ver como lidamos com esses obstáculos.
Antes de tentarmos atalhos, bora entender com o que estamos lidando. Tecnologias anti-bot nada mais são do que sistemas que protegem sites contra o excesso, e muitas vezes indesejados, de atenção de programas automatizados. Aqui estão alguns métodos comuns:
- CAPTCHA: CAPTCHA é tipo o "armamento nuclear" no mundo dos anti-bots. A ideia é filtrar requisições de bots, pedindo ao usuário tarefas que só humanos conseguem fazer: tipo selecionar todas as imagens com cachorros ou digitar uma combinação distorcida de letras.
- Análise de comportamento: Alguns sites analisam a rapidez com que você preenche formulários ou interage com os elementos. Muito rápido? Bloqueado.
- Atrasos e limites de requisições: Se o site começa a suspeitar de que você não é humano, ele pode aumentar os atrasos entre requisições ou simplesmente te bloquear.
2. Métodos para burlar anti-bots
Agora que conhecemos o inimigo, vamos explorar algumas maneiras de passar por cima dele.
Resolver CAPTCHA
A maneira mais óbvia e ao mesmo tempo complicada é automatizar a solução do CAPTCHA. Sim, isso é possível, mas exige ferramentas específicas e serviços de terceiros. Existem diferentes tipos de CAPTCHA, como os de texto, gráficos, e até áudio.
Para resolver CAPTCHA de forma automatizada, dá pra usar APIs de serviços como 2Captcha ou Anti-Captcha, que oferecem soluções pagas. Vamos ver como isso pode ser feito na prática:
import requests
def solve_captcha(api_key, site_url, captcha_image_url):
# Fazendo download da imagem CAPTCHA
captcha_image = requests.get(captcha_image_url).content
# Enviando a imagem para o serviço e pegando o ID da tarefa
response = requests.post("http://2captcha.com/in.php", files={'file': captcha_image}, data={'key': api_key, 'method': 'post'})
captcha_id = response.text.split('|')[1]
# Pegando a solução do CAPTCHA
solution_url = f"http://2captcha.com/res.php?key={api_key}&action=get&id={captcha_id}"
solution_response = requests.get(solution_url)
while 'CAPCHA_NOT_READY' in solution_response.text:
solution_response = requests.get(solution_url)
return solution_response.text.split('|')[1]
# Exemplo de uso
api_key = 'SEU_API_KEY_2CAPTCHA'
site_url = 'https://example.com'
captcha_image_url = 'https://example.com/captcha_image'
captcha_solution = solve_captcha(api_key, site_url, captcha_image_url)
print("Solução do CAPTCHA:", captcha_solution)
Esse código mostra como você pode fazer uma requisição para resolver um CAPTCHA. Mas esses métodos podem não ser tão eficientes para desafios gráficos complicados ou se o site muda seus algoritmos frequentemente.
Simulação de comportamento humano
Outra maneira de enganar o sistema é simular comportamento humano. Você pode adicionar atrasos aleatórios nos seus scripts, alterar user-agents, emular interações bidirecionais e até simular o movimento do mouse com Selenium:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
driver.get('https://example.com')
# Simulando movimento do mouse
actions = ActionChains(driver)
element = driver.find_element_by_id('button')
actions.move_to_element(element)
actions.perform()
# Atraso para criar uma interação natural
time.sleep(2)
# Realizando a ação
element.click()
Vamos falar mais sobre o Selenium nas próximas aulas.
Usar IPs dinâmicos e proxies
Você também pode usar proxies para alterar o endereço IP das suas requisições. Isso pode ajudar a evitar limites de requisições de um IP só. Serviços como Bright Data e Smartproxy são úteis para isso.
import requests
proxy = {
"http": "http://123.456.789.012:8080",
"https": "http://123.456.789.012:8080",
}
response = requests.get('https://example.com', proxies=proxy)
print(response.content)
3. Notas importantes
Implementar técnicas para burlar anti-bots requer conhecimento e experimentação. É importante lembrar que nem todos os métodos são legais ou bem-vindos pelos sites. Sempre verifique o que é permitido em "robots.txt", e siga as boas práticas de web scraping, evitando sobrecarregar servidores. Isso não só vai evitar problemas legais, mas também demonstra respeito ao trabalho alheio.
Nunca rode um parser sério do seu IP residencial. Por testes e aprendizado ninguém vai te encrencar, mas se o seu script derrubar o servidor de alguém, enviando milhares de requisições ao mesmo tempo, é bem capaz de alguém aparecer pra te cobrar explicações.
GO TO FULL VERSION