O Craigslist ainda é uma plataforma significativa para acessar anúncios classificados específicos no cenário digital atual. A utilização de Python para simplificar a extração de detalhes dos anúncios revela-se muito útil. A adaptabilidade e a robustez das bibliotecas Python, como Requests ou BeautifulSoup, permitem realizar operações produtivas de raspagem da web. Este guia mergulha no reino do Craigslist scraping com Python, destacando a utilização do BeautifulSoup e Requests para extração de conteúdo, juntamente com a rotação de proxy para navegar nas defesas anti-bot de forma eficaz.
Em seguida, passaremos pelo processo de raspagem passo a passo, começando com o envio de solicitações HTTP e extraindo elementos específicos da página, e terminando com o salvamento dos dados no formato necessário.
Você precisará instalar as bibliotecas necessárias:
pip install beautifulsoup4
pip install requests
Use a biblioteca requests para enviar solicitações HTTP GET para as páginas de listagem do Craigslist.
import requests
# Lista de URLs da Craigslist a serem extraídos
urls = [
"link",
"link"
]
for url in urls:
# Enviar um pedido GET para o URL
response = requests.get(url)
# Verificar se o pedido foi bem sucedido (código de estado 200)
if response.status_code == 200:
# Extrair conteúdo HTML da resposta
html_content = response.text
else:
# Se o pedido falhar, imprime uma mensagem de erro com o código de estado
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
Use o BeautifulSoup para analisar HTML e navegar pelo conteúdo recuperado.
from bs4 import BeautifulSoup
# Iterar através de cada URL na lista
for url in urls:
# Enviar um pedido GET para o URL
response = requests.get(url)
# Verificar se o pedido foi bem sucedido (código de estado 200)
if response.status_code == 200:
# Extrair conteúdo HTML da resposta
html_content = response.text
# Analisar o conteúdo HTML usando BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
else:
# Se o pedido falhar, imprime uma mensagem de erro com o código de estado
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
Extraia dados como títulos de itens e preços de listagens do Craigslist usando métodos BeautifulSoup.
from bs4 import BeautifulSoup
# Iterar através de cada URL na lista
for url in urls:
# Enviar um pedido GET para o URL
response = requests.get(url)
# Verificar se o pedido foi bem sucedido (código de estado 200)
if response.status_code == 200:
# Extrair conteúdo HTML da resposta
html_content = response.text
# Analisar o conteúdo HTML usando BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
# Extração de pontos de dados específicos
# Procurar o título da listagem
title = soup.find('span', id='titletextonly').text.strip()
# Encontrar o preço do anúncio
price = soup.find('span', class_='price').text.strip()
# Encontrar a descrição do anúncio (pode conter vários parágrafos)
description = soup.find('section', id='postingbody').find_all(text=True, recursive=False)
# Imprimir dados extraídos (para fins de demonstração)
print(f"Title: {title}")
print(f"Price: {price}")
print(f"Description: {description}")
else:
# Se o pedido falhar, imprime uma mensagem de erro com o código de estado
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
Título:
Preço:
Descrição:
Depois que os dados forem extraídos, salve-os em um arquivo CSV para análise posterior ou integração com outras ferramentas.
import csv
# Definir o caminho do ficheiro CSV e os nomes dos campos
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']
# Escrever dados num ficheiro CSV
try:
# Abrir o ficheiro CSV em modo de escrita com codificação UTF-8
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
# Criar um objeto CSV DictWriter com os nomes de campo especificados
writer = csv.DictWriter(file, fieldnames=fieldnames)
# Escrever a linha de cabeçalho no ficheiro CSV
writer.writeheader()
# Iterar através de cada item na lista scraped_data
for item in scraped_data:
# Escrever cada item como uma linha no ficheiro CSV
writer.writerow(item)
# Imprimir uma mensagem de sucesso após a escrita de dados no ficheiro CSV
print(f"Data saved to {csv_file}")
except IOError:
# Imprimir uma mensagem de erro se ocorrer um IOError durante a escrita no ficheiro CSV
print(f"Error occurred while writing data to {csv_file}")
A Craigslist pode implementar medidas para impedir a raspagem, como o bloqueio de IP ou desafios CAPTCHA. Para atenuar estes problemas, considere a utilização de proxies e agentes de utilizador rotativos.
Usando proxies:
Este exemplo demonstra o uso de um proxy com autorização de endereço IP.
proxies = {
'http': 'http://your_proxy_ip:your_proxy_port',
'https': 'https://your_proxy_ip:your_proxy_port'
}
response = requests.get(url, proxies=proxies)
Rotação User-Agent:
import random
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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
# Adicionar mais agentes de utilizador conforme necessário
]
headers = {
'User-Agent': random.choice(user_agents)
}
response = requests.get(url, headers=headers)
Este script Python completo mostra como integrar diferentes componentes para construir um raspador Craigslist eficiente que extrai, analisa e recupera dados de vários URLs.
import requests
import urllib3
from bs4 import BeautifulSoup
import csv
import random
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()
# Lista de URLs da Craigslist a serem extraídos
urls = [
"link",
"link"
]
# Agentes do utilizador e proxies
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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
]
proxies = [
{'http': 'http://your_proxy_ip1:your_proxy_port1', 'https': 'https://your_proxy_ip1:your_proxy_port1'},
{'http': 'http://your_proxy_ip2:your_proxy_port2', 'https': 'https://your_proxy_ip2:your_proxy_port2'},
]
# Lista para armazenar dados extraídos
scraped_data = []
# Percorrer cada URL da lista
for url in urls:
# Rodar o agente do utilizador para cada pedido para evitar a deteção
headers = {
'User-Agent': random.choice(user_agents)
}
# Utilize um proxy diferente para cada pedido para evitar o bloqueio de IP
proxy = random.choice(proxies)
try:
# Enviar pedido GET para o URL da Craigslist com cabeçalhos e proxy
response = requests.get(url, headers=headers, proxies=proxy, timeout=30, verify=False)
# Verificar se o pedido foi bem sucedido (código de estado 200)
if response.status_code == 200:
# Analisar o conteúdo HTML da resposta
html_content = response.text
soup = BeautifulSoup(html_content, 'html.parser')
# Extrair dados do HTML analisado
title = soup.find('span', id='titletextonly').text.strip()
price = soup.find('span', class_='price').text.strip()
description = soup.find('section', id='postingbody').get_text(strip=True, separator='\n') # Extracting description
# Append scraped data as a dictionary to the list
scraped_data.append({'Title': title, 'Price': price, 'Description': description})
print(f"Data scraped for {url}")
else:
# Imprimir mensagem de erro se o pedido falhar
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
except Exception as e:
# Imprimir mensagem de exceção se ocorrer um erro durante a raspagem
print(f"Exception occurred while scraping {url}: {str(e)}")
# Configuração do ficheiro CSV para armazenar dados extraídos
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']
# Escrever dados extraídos para um ficheiro CSV
try:
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
# Escrever a linha de cabeçalho no ficheiro CSV
writer.writeheader()
# Iterar através da lista scraped_data e escrever cada item no ficheiro CSV
for item in scraped_data:
writer.writerow(item)
# Imprimir mensagem de sucesso se os dados forem guardados com êxito
print(f"Data saved to {csv_file}")
except IOError:
# Imprimir mensagem de erro se houver um IOError durante a escrita no ficheiro CSV
print(f"Error occurred while writing data to {csv_file}")
A Craigslist é importante porque fornece um local onde podemos encontrar anúncios classificados que nos dão informações úteis para examinar mercados, encontrar contactos, entre outros. A raspagem da web do Craigslist é facilitada pelo Python usando bibliotecas como BeautifulSoup e Request. As principais tácticas discutidas neste tutorial são a manipulação de conteúdo dinâmico e a rotação de proxies. Ao utilizar o Python de forma responsável, é possível extrair informações úteis das listagens do Craigslist, apoiando a tomada de decisões informadas em vários domínios.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentários: 0