pt
English
Español
中國人
Tiếng Việt
Deutsch
Українська
Français
भारतीय
Türkçe
한국인
Italiano
Gaeilge
اردو
Indonesia
Polski Os Web crawlers são utilizados para monitorização de preços, agregação de notícias, análise da concorrência, indexação de motores de busca e outras tarefas que requerem a recolha de dados estruturados de sítios Web. Este guia explica como construir um Web crawler de raiz, começando com o planeamento do projeto e as escolhas tecnológicas, e terminando com a configuração do ambiente e o armazenamento de dados. Fornece uma base que pode ser posteriormente alargada a projectos mais complexos e de grande escala.
É um programa que visita automaticamente páginas Web e recolhe informações das mesmas. Funciona enviando chamadas HTTP para um sítio, recuperando o HTML de cada página e processando esse HTML para extrair os dados necessários. Depois disso, segue as ligações internas e repete o processo até atingir limites predefinidos ou condições de paragem. Este processo não é o mesmo que a raspagem da Web. Para uma comparação pormenorizada, ver Web scraping vs web crawling.
Estas ferramentas são amplamente utilizadas para:
Nestes cenários, construir o seu próprio Web crawler é muitas vezes a melhor abordagem: pode ajustar o programa às suas necessidades exactas, controlar a frequência dos pedidos e definir quais as informações a recolher e como.
Antes de começar a codificar, defina os parâmetros principais do seu projeto para evitar problemas comuns e garantir um funcionamento estável.
Uma ferramenta bem planeada funciona de forma fiável, utiliza os recursos de forma eficiente e fornece resultados de alta qualidade.
É possível construir um Web crawler em várias linguagens de programação, incluindo Python, Java e PHP. Python destaca-se pela sua sintaxe simples e pelo rico ecossistema de bibliotecas para pedidos HTTP e análise de HTML (como requests, BeautifulSoup, lxml). Java é uma escolha sólida para projectos empresariais e de grande escala. O PHP é mais comum no desenvolvimento Web e menos conveniente para crawlers autónomos.
Para uma primeira tentativa, vamos considerar como construir um Web crawler em Python, uma vez que é normalmente a melhor escolha porque permite implementar e testar rapidamente a funcionalidade básica.
Comece por instalar o Python a partir do diretório sítio Web oficial. Em seguida, instale as bibliotecas principais que irá utilizar: requests para enviar pedidos HTTP e BeautifulSoup para analisar HTML:
pip install requests beautifulsoup4
Também vale a pena organizar a estrutura do seu projeto desde o início: ficheiros separados para a lógica principal, configuração e utilitários. Isso facilita muito a manutenção e o dimensionamento futuros.
Um script básico pode consistir em três partes principais: enviar um pedido, processar HTML e seguir ligações.
from bs4 import BeautifulSoup
import time
import random
# Configuration
url = "https://quotes.toscrape.com/" # Replace this with your target site
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
}
timeout = 5 # server response timeout
max_retries = 3 # maximum number of retries on errors
# You can add your proxy here if needed
proxies = {
"http": "http://username:password@proxyserver:port",
"https": "https://username:password@proxyserver:port"
}
# Function to check access via robots.txt
def can_crawl(base_url, path="/"):
try:
robots_url = base_url.rstrip("/") + "/robots.txt"
r = requests.get(robots_url, headers=headers, timeout=timeout)
if r.status_code == 200 and f"Disallow: {path}" in r.text:
print(f"Service {path} forbidden for scraping robots.txt")
return False
except requests.RequestException:
# If robots.txt is unavailable, continue
pass
return True
# Main logic
if can_crawl(url):
for attempt in range(max_retries):
try:
response = requests.get(url, headers=headers, timeout=timeout, proxies=proxies)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'lxml')
# Collect links
links = [a['href'] for a in soup.find_all('a', href=True)] # You can change selector here
print("Found links:", links)
# Delay between requests to simulate more realistic behavior
time.sleep(random.uniform(3, 7)) # better than a fixed 5-second delay
break # if everything succeeds, exit the retry loop
except requests.RequestException as e:
print(f"Request error (attempt {attempt+1}): {e}")
wait = 2 ** attempt
print(f"Waiting {wait} seconds before retry...")
time.sleep(wait)
else:
print("The crawler cannot process this resource due to robots.txt rules")
Este script mostra o fluxo de trabalho básico: fazer um pedido, analisar HTML e recolher ligações.
Para sites com várias páginas, é necessário um loop que percorra todas as páginas. Exemplo:
for page in range(1, 6):
url = f"https://google.com/page/{page}"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# data processing
O rastreio responsável inclui a verificação do ficheiro robots.txt de um sítio e o cumprimento das suas regras. Também é necessário introduzir atrasos entre os pedidos para não sobrecarregar o servidor. Com a função time.sleep(), é possível adicionar pausas entre as buscas de páginas.
import time
from bs4 import BeautifulSoup
for page in range(1, 6):
url = f"https://google.com/page/{page}"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# data processing
time.sleep(5) # delay in seconds
Pode armazenar os detalhes recolhidos em formatos convenientes como CSV ou JSON. Por exemplo, para guardar uma lista de ligações:
import json
data = {"links": links}
with open("links.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=4)
Seguindo estes passos, acaba com um Web crawler básico que pode ser alargado para tarefas mais avançadas. Pode escalar o código, integrar o suporte de proxy, lidar com um grande número de páginas ou passar para estruturas mais poderosas como o Scrapy para cenários complexos de recolha de dados.
Comentários: 0