de
English
Español
中國人
Tiếng Việt
Українська
Português
Français
भारतीय
Türkçe
한국인
Italiano
Gaeilge
اردو
Indonesia
Polski Eine Anzeigenplattform wie Craigslist bleibt auch im digitalen Zeitalter relevant. Der Collector hilft dabei, die Extraktion von Informationen aus Anzeigen zu automatisieren, insbesondere durch den direkten Bezug von Daten von Websites. Dank flexibler und leistungsstarker Bibliotheken wie BeautifulSoup und Requests kann die Datensammlung effizient durchgeführt werden. In diesem Tutorial geht es um Craigslist-Scraping mit Python, wobei BeautifulSoup, Requests und Proxy-Rotation zur Vermeidung von Bot-Erkennung im Vordergrund stehen.
Wir werden jetzt Schritt für Schritt aufschlüsseln, wie man Craigslist scrapen kann.
Jetzt werden wir die Schritte des Web Scraping Craigslist im Detail durchgehen, beginnend mit dem Senden von HTTP-Anfragen an eine bestimmte Webseite, dem Aufteilen der gewünschten Seite, dem Sammeln der gewünschten Daten und dem Speichern in einem vorgegebenen Format.
Die folgenden Pakete müssen heruntergeladen und installiert werden:
pip install beautifulsoup4
pip install requests
Um Daten von Webseiten abzurufen, müssen Sie zunächst HTTP-Anfragen an die URLs senden, die Sie abrufen möchten. Mit der Anforderungsbibliothek können Sie GET-Anforderungen senden, um den HTML-Inhalt abzurufen, den Sie dann verarbeiten können, um die benötigten Informationen zu extrahieren.
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}")
Mit BeautifulSoup können Sie den HTML-Code durchgehen und die Teile, die Sie benötigen, aus Craigslist heraussuchen. Sie können Tags finden, Text abrufen und Dinge wie Links oder Preise erfassen. Es ist ein einfacher Weg, um nützliche Informationen aus unübersichtlichen Webseiten zu ziehen.
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}")
Nach dem Abrufen des HTML-Inhalts wird dieser im nächsten Schritt mit der BeautifulSoup-Bibliothek geparst. Mithilfe von Funktionen führen wir Craigslist-Daten-Scraping durch, z. B. Auflistungen wie Artikeltitel und Preise. Es ist, als hätte man ein Werkzeug, das einem hilft, den unordentlichen Code zu durchforsten, um die nützlichen Teile schnell und effizient zu finden.
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:
Preis:
Beschreibung:
Nachdem wir die Craigslist-Daten extrahiert haben, stellen Sie sicher, dass sie im CSV-Format gespeichert werden, um die spätere Nutzung oder Analyse zu erleichtern und die Interoperabilität mit anderen Anwendungen zu gewährleisten.
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}")
Wenn Sie automatisch Angebote von der Craigslist-Website sammeln möchten, ist eine der einfachsten Möglichkeiten, die inoffizielle API über eine Bibliothek zu nutzen. Damit können Sie die Website abfragen und die Ergebnisse nach Kategorie, Stadt, Preis, Schlüsselwörtern und mehr filtern.
Beginnen Sie mit der Installation der Bibliothek:
pip install python-craigslist
Hier ist ein einfaches Beispiel für die Suche nach Mietwohnungen in New York:
from craigslist import CraigslistHousing
cl_h = CraigslistHousing(site='newyork', category='apa', filters={'max_price': 2000})
for result in cl_h.get_results(limit=10):
print(result['name'], result['price'], result['url'])
Mit diesem Code werden die ersten 10 Angebote aus dem Bereich Wohnungen/Häuser zur Miete in New York City mit einem Preis von unter 2000 $ angezeigt.
Die Bibliothek unterstützt auch Kategorien wie Jobs, Autos, zu verkaufende Artikel und mehr - zusammen mit einer breiten Palette von Filtern. Es ist ein großartiges Werkzeug für die schnelle Erstellung von Python-basierten Tools, wie z. B. Bots, Listing-Tracker oder Marktanalysen.
Es gibt eine Reihe zusätzlicher Herausforderungen, denen man beim Web-Scraping begegnen kann, insbesondere bei Craigslist. Es werden IP-Sperren und CAPTCHA-Herausforderungen implementiert, um Scraping-Versuche zu verhindern. Um diese Probleme zu vermeiden, können Sie neben der Rotation des Benutzeragenten auch Proxys implementieren.
Verwendung von Proxys:
Die Verwendung von Proxys und rotierenden Benutzer-Agenten ist ein intelligenter Weg, um Scraping zu betreiben, ohne erwischt zu werden.
proxies = {
'http': 'http://your_proxy_ip:your_proxy_port',
'https': 'https://your_proxy_ip:your_proxy_port'
}
response = requests.get(url, proxies=proxies)
User-Agent-Rotation bedeutet, dass Sie die Browser-Identität, die Ihr Scraper bei jeder Anfrage sendet, ändern. Wenn Sie immer denselben Benutzer-Agenten verwenden, wirkt das verdächtig. Wenn Sie zwischen verschiedenen Benutzer-Agenten wechseln, wirkt Ihr Scraper eher wie ein normaler Benutzer, was hilft, Blockierungen zu vermeiden:
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)
Die Integration aller in diesem Tutorial besprochenen Module ermöglicht die Entwicklung eines voll funktionsfähigen Python Craigslist Scrapers. Dieses Programm kann eine Reihe von URLs extrahieren, parsen und durch sie navigieren und die benötigten Daten abrufen.
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') # Beschreibung extrahieren
# 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}")
Jetzt, da Sie wissen, wie Web-Scraping funktioniert, ist es leicht zu erkennen, warum es so praktisch ist - egal, ob Sie Märkte analysieren oder nach Leads suchen. Websites sind vollgepackt mit wertvollen Informationen, und Tools wie BeautifulSoup und Requests machen das Abrufen dieser Daten ziemlich einfach. In diesem Leitfaden werden auch wichtige Tipps gegeben, wie z. B. der Umgang mit dynamischen Inhalten und die Verwendung von rotierenden Proxys, um unter dem Radar zu bleiben. Wenn es richtig gemacht wird, kann Scraping mit Python Unternehmen und Menschen wirklich dabei helfen, in allen möglichen Bereichen intelligentere Entscheidungen zu treffen.
Bemerkungen: 0