Craigslist è ancora una piattaforma importante per accedere a specifici annunci nel panorama digitale attuale. L'uso di Python per semplificare l'estrazione dei dettagli dagli annunci si rivela molto utile. Le operazioni di scraping web sono rese possibili dall'adattabilità e dalle solide librerie di Python, come Requests o BeautifulSoup. Questa guida si addentra nel regno dello scraping di Craigslist con Python, evidenziando l'utilizzo di BeautifulSoup e Requests per l'estrazione dei contenuti, insieme alla rotazione dei proxy per superare efficacemente le difese anti-bot.
Successivamente, esamineremo passo per passo il processo di scraping, a partire dall'invio di richieste HTTP e dall'estrazione di elementi specifici della pagina, per finire con il salvataggio dei dati nel formato richiesto.
È necessario installare le librerie necessarie:
pip install beautifulsoup4
pip install requests
Utilizzare la libreria requests per inviare richieste HTTP GET alle pagine degli annunci di Craigslist.
import requests
# Elenco degli URL di Craigslist da raschiare
urls = [
"link",
"link"
]
for url in urls:
# Inviare una richiesta GET all'URL
response = requests.get(url)
# Controllare se la richiesta è andata a buon fine (codice di stato 200)
if response.status_code == 200:
# Estrarre il contenuto HTML dalla risposta
html_content = response.text
else:
# Se la richiesta non è andata a buon fine, viene stampato un messaggio di errore con il codice di stato
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
Usare BeautifulSoup per l'analisi dell'HTML e la navigazione tra i contenuti recuperati.
from bs4 import BeautifulSoup
# Iterare ogni URL dell'elenco
for url in urls:
# Inviare una richiesta GET all'URL
response = requests.get(url)
# Controllare se la richiesta è andata a buon fine (codice di stato 200)
if response.status_code == 200:
# Estrarre il contenuto HTML dalla risposta
html_content = response.text
# Analizzare il contenuto HTML usando BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
else:
# Se la richiesta non è andata a buon fine, viene stampato un messaggio di errore con il codice di stato
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
Estrarre dati come i titoli e i prezzi degli articoli dagli annunci di Craigslist usando i metodi di BeautifulSoup.
from bs4 import BeautifulSoup
# Iterare ogni URL dell'elenco
for url in urls:
# Inviare una richiesta GET all'URL
response = requests.get(url)
# Controllare se la richiesta è andata a buon fine (codice di stato 200)
if response.status_code == 200:
# Estrarre il contenuto HTML dalla risposta
html_content = response.text
# Analizzare il contenuto HTML usando BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
# Estrazione di punti dati specifici
# Trovare il titolo dell'annuncio
title = soup.find('span', id='titletextonly').text.strip()
# Trova il prezzo dell'annuncio
price = soup.find('span', class_='price').text.strip()
# Trovare la descrizione dell'annuncio (può contenere più paragrafi)
description = soup.find('section', id='postingbody').find_all(text=True, recursive=False)
# Stampa dei dati estratti (a scopo dimostrativo)
print(f"Title: {title}")
print(f"Price: {price}")
print(f"Description: {description}")
else:
# Se la richiesta fallisce, viene stampato un messaggio di errore con il codice di stato
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
Titolo:
Prezzo:
Descrizione:
Una volta estratti i dati, salvarli in un file CSV per ulteriori analisi o per l'integrazione con altri strumenti.
import csv
# Definire il percorso del file CSV e i nomi dei campi
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']
# Scrittura dei dati in un file CSV
try:
# Aprire il file CSV in modalità di scrittura con codifica UTF-8
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
# Crea un oggetto CSV DictWriter con i nomi di campo specificati
writer = csv.DictWriter(file, fieldnames=fieldnames)
# Scrivere la riga di intestazione nel file CSV
writer.writeheader()
# Iterare ogni elemento nell'elenco scraped_data
for item in scraped_data:
# Scrivere ogni elemento come riga nel file CSV
writer.writerow(item)
# Stampa un messaggio di successo dopo la scrittura dei dati nel file CSV
print(f"Data saved to {csv_file}")
except IOError:
# Stampa un messaggio di errore se si verifica un IOError durante la scrittura sul file CSV
print(f"Error occurred while writing data to {csv_file}")
Craigslist può implementare misure per prevenire lo scraping, come il blocco degli IP o le sfide CAPTCHA. Per mitigare questi problemi, è bene considerare l'utilizzo di proxy e agenti utente a rotazione.
Utilizzo di proxy:
Questo esempio dimostra l'uso di un proxy con autorizzazione dell'indirizzo IP.
proxies = {
'http': 'http://your_proxy_ip:your_proxy_port',
'https': 'https://your_proxy_ip:your_proxy_port'
}
response = requests.get(url, proxies=proxies)
Rotazione dell'utente (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',
# Aggiungere altri agenti utente se necessario
]
headers = {
'User-Agent': random.choice(user_agents)
}
response = requests.get(url, headers=headers)
Questo script Python completo mostra come integrare diversi componenti per costruire un efficiente scraper di Craigslist che estrae, analizza e recupera dati da più URL.
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()
# Elenco degli URL di Craigslist da raschiare
urls = [
"link",
"link"
]
# Agenti utente e proxy
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'},
]
# Elenco per memorizzare i dati di scraping
scraped_data = []
# Eseguire il loop di ogni URL dell'elenco
for url in urls:
# Ruota l'agente utente per ogni richiesta per evitare il rilevamento
headers = {
'User-Agent': random.choice(user_agents)
}
# Utilizzare un proxy diverso per ogni richiesta per evitare il blocco dell'IP.
proxy = random.choice(proxies)
try:
# Inviare la richiesta GET all'URL di Craigslist con intestazioni e proxy
response = requests.get(url, headers=headers, proxies=proxy, timeout=30, verify=False)
# Controllare se la richiesta è andata a buon fine (codice di stato 200)
if response.status_code == 200:
# Analizzare il contenuto HTML della risposta
html_content = response.text
soup = BeautifulSoup(html_content, 'html.parser')
# Estrarre i dati dall'HTML analizzato
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
# Aggiungere i dati scraped come dizionario all'elenco
scraped_data.append({'Title': title, 'Price': price, 'Description': description})
print(f"Data scraped for {url}")
else:
# Stampa del messaggio di errore se la richiesta fallisce
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
except Exception as e:
# Stampa un messaggio di eccezione se si verifica un errore durante lo scraping
print(f"Exception occurred while scraping {url}: {str(e)}")
# Impostazione del file CSV per l'archiviazione dei dati di scraping
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']
# Scrittura dei dati di scraping in un file CSV
try:
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
# Scrivere la riga di intestazione nel file CSV
writer.writeheader()
# Iterare l'elenco di scraped_data e scrivere ogni elemento nel file CSV
for item in scraped_data:
writer.writerow(item)
# Stampa il messaggio di successo se i dati sono stati salvati con successo
print(f"Data saved to {csv_file}")
except IOError:
# Stampa il messaggio di errore se si verifica un IOError durante la scrittura del file CSV
print(f"Error occurred while writing data to {csv_file}")
Craigslist è importante perché offre un luogo dove trovare annunci che forniscono informazioni utili per esaminare i mercati, trovare contatti e altro. Il web scraping di Craigslist è reso semplice da Python che utilizza librerie come BeautifulSoup e Request. Le tattiche chiave discusse in questo tutorial sono la gestione dei contenuti dinamici e la rotazione dei proxy. Sfruttando Python in modo responsabile, è possibile estrarre informazioni utili dagli annunci di Craigslist, supportando un processo decisionale informato in vari settori.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commenti: 0