A recolha de dados de um sítio Web é muito mais do que a simples recolha do seu conteúdo; há muita coisa envolvida. Para contornar limites, lacunas e outros bloqueios sofisticados, é necessário utilizar uma série de métodos adicionais, como a recolha de dados Python.
Neste artigo, vamos definir o que é o Python scraping e justificar por que razão é a ferramenta ideal para a tarefa. E também delinear tácticas que fazem uso das capacidades de raspagem de dados Python. Tudo isso ajudará a recuperar informações até mesmo dos sites mais seguros.
Esta ferramenta foi especificamente concebida para servir como um excelente recurso para a recolha de dados de sítios Web. Para além da sua facilidade de utilização, as bibliotecas Python, como Scrapy, Selenium e BeautifulSoup, são extremamente poderosas. Além disso, existe uma nova comunidade ativa que continua a desenvolver scripts e a prestar apoio a novos utilizadores. É por isso que o Python é atualmente utilizado para a recolha de dados da Web. Assim, vamos destacar as principais estratégias disponíveis neste momento.
Este bloco mostrará ao utilizador como fazer scraping de websites complexos utilizando técnicas mais sofisticadas incorporadas no Python. O utilizador aprenderá a:
Estas abordagens ajudariam a tornar eficaz a recolha de dados Python, minimizando as hipóteses de bloqueio ou recusa de acesso ao servidor.
Agora, vamos prosseguir com as tácticas sobre como fazer scraping em Python de uma forma eficaz.
Uma infinidade de sítios Web implementa sistemas de segurança CAPTCHA como uma excelente linha de defesa para proteger as suas informações contra a recolha premeditada de dados do Python. Esses sistemas podem ser vencidos de várias formas, empregando serviços de reconhecimento automático, como o 2Captcha ou o Anti-Captcha, ou utilizando a aprendizagem automática para identificar cognitivamente as imagens. Outra possibilidade é reduzir a quantidade de consultas a um nível que o tribunal não associe à expetativa de recolha de informações.
Para tornar as consultas menos hostis, os utilizadores devem agir de uma forma mais próxima do comportamento normal. Introduzir tempos aleatórios entre acções, mudar de User-Agent, percorrer a página, mover o ponteiro do rato, simular a escrita e muito mais. A utilização do Selenium ou do Playwright como ferramentas de raspagem Python dá à automatização caraterísticas muito mais semelhantes às humanas, de modo a evitar bloqueios.
import random
import requests
url = 'https://google.com'
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'dnt': '1',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
}
headers['user-agent'] = random.choice(user_agents)
response = requests.get(url=url, headers=headers)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
options = webdriver.ChromeOptions()
options.add_argument("--headless") # Executar o browser sem uma interface gráfica
driver = webdriver.Chrome(options=options)
driver.get("https://google.com")
# Procurar um elemento por XPath
element = driver.find_element(By.XPATH, "//button[text()=Confirm]")
# Utilizar ActionChains para mover o cursor
actions = ActionChains(driver)
actions.move_to_element(element).perform()
# Fechar o browser
driver.quit()
Alguns sítios Web incorporam elementos adicionais concebidos para utilizadores regulares que são invisíveis, mas que um bot pode acionar acidentalmente. Estes elementos incluem formulários ocultos, em que o facto de clicar e submetê-los fará com que o sítio bloqueie o acesso do bot. Antes da recolha de dados, utilize estilos e atributos CSS como display: none ou opacity: 0 e evite ativar esses estilos.
Se os pedidos forem efectuados sem os cookies corretos ou a configuração da sessão, alguns sítios bloquearão pedidos repetidos que sejam considerados demasiado simples. Para contornar este problema, utilize requests.Session(), utilize cookies guardados e actue como um utilizador genuíno. Também é necessário alterar os cabeçalhos User-Agent, uma vez que o bot vai ser reconhecido por eles.
Caso o servidor não responda ou devolva temporariamente um erro, faça uma pausa antes de efetuar novas tentativas de repetir o comando. O backoff exponencial é mais preferível - refere-se ao aumento do tempo de espera após cada tentativa falhada. Por exemplo, pode ser aumentado em 1 segundo, 2 segundos, depois 4 segundos, etc. Isso diminui a chance de ser bloqueado, minimizando as limitações do site e diminuindo a carga de trabalho de raspagem de dados com Python.
import time
import requests
def fetch_with_backoff(url, max_retries=5):
retries = 0
wait_time = 1 # Atraso de 1 segundo
while retries < max_retries:
try:
response = requests.get(url)
# Se o pedido for bem sucedido, devolve o resultado
if response.status_code == 200:
return response.text
print(f"Error {response.status_code}. Retrying in {wait_time} sec.")
except requests.exceptions.RequestException as e:
print(f"Connection error: {e}. Retrying in {wait_time} sec.")
# Esperar antes de tentar de novo
time.sleep(wait_time)
# Aumentar o atraso
wait_time *= 2
retries += 1
return None
url = "https://google.com"
html = fetch_with_backoff(url)
Alguns sítios Web podem carregar o conteúdo por fases, ou podem funcionar apenas depois de receberem alguns dados do utilizador. Nesses casos, é improvável que bibliotecas como a BeautifulSoup ajudem. Neste caso, o web scraping com Selenium, Puppeteer e Playwright ajudará. Permitem-lhe abrir páginas como um utilizador normal o faria, o que significa que pode clicar em botões, escrever texto e interagir com elementos da página.
Há algumas páginas Web que não utilizam JavaScript para mostrar dados até que um utilizador tenha acedido à página Web. Com isso, uma solicitação HTTP padrão não obterá todas as informações necessárias. O Selenium pode ser usado para reunir essas informações, ou as solicitações de rede podem ser examinadas usando o DevTools do navegador. Isso ajuda na deteção de pontos de extremidade de API ocultos, que podem ser utilizados posteriormente para a recuperação de informações com o mínimo de problemas.
A esmagadora maioria dos sítios Web passa os pedidos automatizados para o servidor para processamento posterior. É sabido que alguns sítios Web verificam as impressões digitais TLS como forma de distinguir os pedidos automatizados. Isto significa que o servidor estuda vários atributos de ligação como a atenção TLS/SSL utilizando tecnologia, cifras e outras ligações sofisticadas. Para o conseguir, pode misturar atributos de ligação nos pedidos utilizando cabeçalhos e proxies personalizados.
import requests
url = 'username:password@your-proxy'
proxy = 'your-proxy'
proxies = {
"http": f"http://{proxy}",
"https": f"https://{proxy}",
}
response = requests.get(url=url, proxies=proxies)
Se um sítio Web oferecer uma API pública, é aconselhável utilizá-la em vez de recorrer à recolha de dados. Esta abordagem é mais rápida, mais fiável e tem menos probabilidades de ser bloqueada. Um bom ponto de partida para encontrar um ponto de extremidade da API é verificar os pedidos que o site faz, o que é visível no DevTools. Na ausência de uma API, terá de trabalhar com o código HTML.
Os sítios Web podem modificar o seu código, o que pode atrasar a sua recolha. Como contrapartida, considere o seguinte:
Em alguns casos, a recolha de dados com Python de sítios Web pode violar os respectivos termos de utilização ou mesmo ser considerada ilegal em determinadas jurisdições. É imperativo examinar o robots.txt e os termos de serviço juntamente com a política do site antes de extrair dados. Também é melhor usar uma API pública, se houver uma disponível. Além disso, defina limites para o número de pedidos para minimizar a pressão sobre o servidor.
O web scraping avançado com Python tem suas próprias vantagens, mas fazê-lo da maneira correta também é igualmente importante. Discutimos aspectos importantes desse processo no que diz respeito a contornar o CAPTCHA, simular acções do utilizador, gerir cookies e sessões, lidar com honeypots e examinar dados em aplicações Web assíncronas.
Além disso, tenha em conta o aspeto moral e o acordo relevante do sítio utilizado. Utilize os pontos de extremidade da API quando disponíveis e, se a análise de HTML for inevitável, siga todas as diretrizes para reduzir as hipóteses de ser bloqueado e de ter complicações legais.
Com a utilização deste tutorial sobre métodos de raspagem da web com Python, o potencial de risco pode ser bastante reduzido, enquanto a eficácia pode ser aumentada ao máximo.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentários: 0