Anleitung zum Scraping von Craigslist mit Python

Bemerkungen: 0

Craigslist ist immer noch eine wichtige Plattform für den Zugriff auf spezifische Kleinanzeigen in der aktuellen digitalen Szene. Die Verwendung von Python zur Optimierung der Extraktion von Details aus den Anzeigen erweist sich als sehr hilfreich. Produktive Web Scraping Operationen werden durch die Anpassungsfähigkeit und die starken Bibliotheken in Python wie Requests oder BeautifulSoup ermöglicht. Dieser Leitfaden befasst sich mit dem Craigslist-Scraping mit Python und beleuchtet die Verwendung von BeautifulSoup und Requests für die Extraktion von Inhalten sowie die Proxy-Rotation, um die Anti-Bot-Abwehr effektiv zu umgehen.

Grundlegende Schritte zum Scrapen von Craigslist mit Python

Als Nächstes werden wir den Scraping-Prozess Schritt für Schritt durchgehen, beginnend mit dem Senden von HTTP-Anfragen und dem Extrahieren bestimmter Seitenelemente bis hin zum Speichern der Daten im gewünschten Format.

Einrichten der Umgebung

Sie müssen die erforderlichen Bibliotheken installieren:


pip install beautifulsoup4
pip install requests

HTTP-Anfragen an Craigslist-Seiten senden

Verwenden Sie die requests-Bibliothek, um HTTP-GET-Anfragen an Craigslist-Seiten zu senden.


import requests

# Liste der Craigslist-URLs zum Scrapen
urls = [
    "link",
    "link"
]

for url in urls:
    # Senden Sie eine GET-Anfrage an die URL
    response = requests.get(url)
    
    # Prüfen, ob die Anfrage erfolgreich war (Statuscode 200)
    if response.status_code == 200:
        # HTML-Inhalt aus der Antwort extrahieren
        html_content = response.text
        
    else:
        # Wenn die Anfrage fehlgeschlagen ist, wird eine Fehlermeldung mit dem Statuscode
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

Parsing von HTML-Inhalten mit BeautifulSoup

Verwenden Sie BeautifulSoup zum Parsen von HTML-Inhalten und zum Navigieren durch die abgerufenen Inhalte.


from bs4 import BeautifulSoup

# Iterieren Sie durch jede URL in der Liste
for url in urls:
    # Senden Sie eine GET-Anfrage an die URL
    response = requests.get(url)
    
    # Prüfen, ob die Anfrage erfolgreich war (Statuscode 200)
    if response.status_code == 200:
        # HTML-Inhalt aus der Antwort extrahieren
        html_content = response.text
        
        # Parsen des HTML-Inhalts mit BeautifulSoup
        soup = BeautifulSoup(html_content, 'html.parser')
        
    else:
        # Wenn die Anfrage fehlgeschlagen ist, drucken Sie eine Fehlermeldung mit dem Statuscode
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

Datenextraktion mit BeautifulSoup-Methoden

Extrahieren von Daten wie Artikeltitel und Preise aus Craigslist-Auflistungen mit BeautifulSoup-Methoden.


from bs4 import BeautifulSoup

# Iterieren Sie durch jede URL in der Liste
for url in urls:
    # Senden Sie eine GET-Anfrage an die URL
    response = requests.get(url)
    
    # Prüfen, ob die Anfrage erfolgreich war (Statuscode 200)
    if response.status_code == 200:
        # HTML-Inhalt aus der Antwort extrahieren
        html_content = response.text
        
        # Parsen des HTML-Inhalts mit BeautifulSoup
        soup = BeautifulSoup(html_content, 'html.parser')
        
        # Extrahieren bestimmter Datenpunkte
        # Suchen Sie den Titel des Angebots
        title = soup.find('span', id='titletextonly').text.strip()
        
        # Finden Sie den Preis des Angebots
        price = soup.find('span', class_='price').text.strip()
        
        # Suchen Sie die Beschreibung des Angebots (kann mehrere Absätze enthalten)
        description = soup.find('section', id='postingbody').find_all(text=True, recursive=False)
        
        # Extrahierte Daten drucken (zu Demonstrationszwecken)
        print(f"Title: {title}")
        print(f"Price: {price}")
        print(f"Description: {description}")
        
    else:
        # Wenn die Anfrage fehlschlägt, drucken Sie eine Fehlermeldung mit dem Statuscode
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

Titel:

1.png

Preis:

2.png

Beschreibung:

3.png

Speichern von ausgewerteten Daten in einer CSV-Datei

Sobald die Daten extrahiert sind, können Sie sie in einer CSV-Datei speichern, um sie weiter zu analysieren oder in andere Tools zu integrieren.


import csv

# Definieren Sie den Pfad zur CSV-Datei und die Feldnamen
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']

# Daten in eine CSV-Datei schreiben
try:
    # Öffnen Sie die CSV-Datei im Schreibmodus mit UTF-8-Kodierung
    with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
        # Erstellen eines CSV-DictWriter-Objekts mit den angegebenen Feldnamen
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        
        # Schreiben Sie die Kopfzeile in die CSV-Datei
        writer.writeheader()
        
        # Iterieren Sie jedes Element in der Liste scraped_data
        for item in scraped_data:
            # Jedes Element als eine Zeile in die CSV-Datei schreiben
            writer.writerow(item)
        
    # Drucken einer Erfolgsmeldung nach dem Schreiben von Daten in die CSV-Datei
    print(f"Data saved to {csv_file}")

except IOError:
    # Ausgabe einer Fehlermeldung, wenn beim Schreiben in die CSV-Datei ein IOError auftritt
    print(f"Error occurred while writing data to {csv_file}")

Umgang mit möglichen Hindernissen

Craigslist kann Maßnahmen ergreifen, um Scraping zu verhindern, wie z. B. IP-Sperren oder CAPTCHA-Herausforderungen. Um diese Probleme zu entschärfen, sollten Sie die Verwendung von Proxys und rotierenden Benutzeragenten in Betracht ziehen.

Proxys verwenden:

Dieses Beispiel demonstriert die Verwendung eines Proxys mit IP-Adressberechtigung.


proxies = {
    'http': 'http://your_proxy_ip:your_proxy_port',
    'https': 'https://your_proxy_ip:your_proxy_port'
}

response = requests.get(url, proxies=proxies)

Benutzer-Agent Rotation:


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',
    # Bei Bedarf weitere User Agents hinzufügen
]

headers = {
    'User-Agent': random.choice(user_agents)
}

response = requests.get(url, headers=headers)

Vollständiger Code

Dieses vollständige Python-Skript zeigt, wie man verschiedene Komponenten integriert, um einen effizienten Craigslist-Scraper zu erstellen, der Daten aus mehreren URLs extrahiert, analysiert und abruft.


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()


# Liste der Craigslist-URLs zum Scrapen
urls = [
    "link",
    "link"
]

# Benutzeragenten und Proxys
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'},
]

# Liste zum Speichern der ausgewerteten Daten
scraped_data = []

# Schleife durch jede URL in der Liste
for url in urls:
    # Wechsel des Benutzer-Agenten für jede Anfrage, um eine Entdeckung zu vermeiden
    headers = {
        'User-Agent': random.choice(user_agents)
    }

    # Verwenden Sie für jede Anfrage einen anderen Proxy, um IP-Sperren zu vermeiden.
    proxy = random.choice(proxies)

    try:
        # GET-Anfrage an die Craigslist-URL mit Headern und Proxy senden
        response = requests.get(url, headers=headers, proxies=proxy, timeout=30, verify=False)
        
        # Prüfen, ob die Anfrage erfolgreich war (Statuscode 200)
        if response.status_code == 200:
            # Parsen des HTML-Inhalts der Antwort
            html_content = response.text
            soup = BeautifulSoup(html_content, 'html.parser')

            # Daten aus dem geparsten HTML extrahieren
            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

            # Ausgelesene Daten in Form eines Wörterbuchs an die Liste anhängen
            scraped_data.append({'Title': title, 'Price': price, 'Description': description})
            print(f"Data scraped for {url}")
        else:
            # Fehlermeldung ausgeben, wenn die Anfrage fehlschlägt
            print(f"Failed to retrieve {url}. Status code: {response.status_code}")
    except Exception as e:
        # Ausgabe einer Ausnahmemeldung, wenn beim Scrapen ein Fehler auftritt
        print(f"Exception occurred while scraping {url}: {str(e)}")

# Einrichtung einer CSV-Datei zur Speicherung der gescrapten Daten
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']

# Schreiben von ausgewerteten Daten in eine CSV-Datei
try:
    with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
        writer = csv.DictWriter(file, fieldnames=fieldnames)

        # Kopfzeile in die CSV-Datei schreiben
        writer.writeheader()

        # Iterieren Sie die Liste scraped_data und schreiben Sie jedes Element in die CSV-Datei
        for item in scraped_data:
            writer.writerow(item)

    # Erfolgsmeldung ausgeben, wenn die Daten erfolgreich gespeichert wurden
    print(f"Data saved to {csv_file}")
except IOError:
    # Fehlermeldung ausgeben, wenn beim Schreiben in die CSV-Datei ein IOError auftritt
    print(f"Error occurred while writing data to {csv_file}")

Craigslist ist wichtig, weil es einen Ort bietet, an dem wir Kleinanzeigen finden können, die uns nützliche Informationen für die Untersuchung von Märkten, die Suche nach Leads und anderes liefern. Craigslist-Web-Scraping wird durch Python und Bibliotheken wie BeautifulSoup und Request erleichtert. Die wichtigsten in diesem Tutorial besprochenen Taktiken sind der Umgang mit dynamischen Inhalten und rotierenden Proxys. Durch den verantwortungsvollen Einsatz von Python können Sie aus Craigslist-Angeboten verwertbare Erkenntnisse gewinnen, die eine fundierte Entscheidungsfindung in verschiedenen Bereichen unterstützen.

Bemerkungen:

0 Bemerkungen