Diese Anleitung zeigt, wie man mit Python und den Bibliotheken requests und lxml Daten von Yahoo Finance auslesen kann. Yahoo Finance bietet umfangreiche Finanzdaten wie Aktienkurse und Markttrends, die für die Echtzeit-Marktanalyse, die Finanzmodellierung und die Entwicklung automatisierter Anlagestrategien von zentraler Bedeutung sind.
Das Verfahren umfasst das Senden von HTTP-Anfragen zum Abrufen des Webseiteninhalts, das Parsen des empfangenen HTML und das Extrahieren spezifischer Daten mithilfe von XPath-Ausdrücken. Dieser Ansatz ermöglicht eine effiziente und gezielte Datenextraktion, so dass die Benutzer dynamisch auf Finanzinformationen zugreifen und diese nutzen können.
Wir werden die folgenden Python-Bibliotheken verwenden:
Bevor Sie beginnen, vergewissern Sie sich, dass Sie diese Bibliotheken installiert haben:
pip install requests
pip install lxml
Im Folgenden wird der Parsing-Prozess Schritt für Schritt erklärt, mit Code-Beispielen zur Verdeutlichung und zum besseren Verständnis.
Der erste Schritt beim Web Scraping ist das Senden einer HTTP-Anfrage an die Ziel-URL. Wir werden dazu die requests-Bibliothek verwenden. Es ist wichtig, die richtigen Header in die Anfrage einzuschließen, um einen echten Browser zu imitieren, was dabei hilft, grundlegende Anti-Bot-Maßnahmen zu umgehen.
import requests
from lxml import html
# Ziel-URL
url = "https://finance.yahoo.com/quote/AMZN/"
# Kopfzeilen zur Nachahmung eines echten Browsers
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}
# Senden Sie die HTTP-Anfrage
response = requests.get(url, headers=headers)
Nachdem der HTML-Inhalt empfangen wurde, besteht der nächste Schritt darin, die gewünschten Daten mit XPath zu extrahieren. XPath ist eine leistungsfähige Abfragesprache zur Auswahl von Knoten aus einem XML-Dokument, die sich hervorragend zum Parsen von HTML-Inhalten eignet.
Titel und Preis:
Mehr Details:
Nachfolgend finden Sie die XPath-Ausdrücke, die wir verwenden werden, um verschiedene Finanzdaten zu extrahieren:
# Analysieren Sie den HTML-Inhalt
parser = html.fromstring(response.content)
# Extrahieren von Daten mit XPath
title = ' '.join(parser.xpath('//h1[@class="yf-3a2v0c"]/text()'))
live_price = parser.xpath('//fin-streamer[@class="livePrice yf-mgkamr"]/span/text()')[0]
date_time = parser.xpath('//div[@slot="marketTimeNotice"]/span/text()')[0]
open_price = parser.xpath('//ul[@class="yf-tx3nkj"]/li[2]/span[2]/fin-streamer/text()')[0]
previous_close = parser.xpath('//ul[@class="yf-tx3nkj"]/li[1]/span[2]/fin-streamer/text()')[0]
days_range = parser.xpath('//ul[@class="yf-tx3nkj"]/li[5]/span[2]/fin-streamer/text()')[0]
week_52_range = parser.xpath('//ul[@class="yf-tx3nkj"]/li[6]/span[2]/fin-streamer/text()')[0]
volume = parser.xpath('//ul[@class="yf-tx3nkj"]/li[7]/span[2]/fin-streamer/text()')[0]
avg_volume = parser.xpath('//ul[@class="yf-tx3nkj"]/li[8]/span[2]/fin-streamer/text()')[0]
# Drucken der extrahierten Daten
print(f"Title: {title}")
print(f"Live Price: {live_price}")
print(f"Date & Time: {date_time}")
print(f"Open Price: {open_price}")
print(f"Previous Close: {previous_close}")
print(f"Day's Range: {days_range}")
print(f"52 Week Range: {week_52_range}")
print(f"Volume: {volume}")
print(f"Avg. Volume: {avg_volume}")
Websites wie Yahoo Finance setzen oft Anti-Bot-Maßnahmen ein, um automatisches Scraping zu verhindern. Um nicht blockiert zu werden, können Sie Proxys verwenden und Header drehen.
Ein Proxy-Server fungiert als Vermittler zwischen Ihrem Rechner und der Ziel-Website. Er hilft dabei, Ihre IP-Adresse zu verschleiern, so dass es für Websites schwieriger wird, zu erkennen, dass Sie Scraping betreiben.
# Beispiel für die Verwendung eines Proxys mit IP-Autorisierungsmodell
proxies = {
"http": "http://your.proxy.server:port",
"https": "https://your.proxy.server:port"
}
response = requests.get(url, headers=headers, proxies=proxies)
Das Drehen des User-Agent-Headers ist eine weitere wirksame Methode, um eine Entdeckung zu vermeiden. Sie können eine Liste gängiger User-Agent-Zeichenfolgen verwenden und für jede Anfrage eine zufällig auswählen.
import random
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
# Weitere User-Agent-Zeichenfolgen hier hinzufügen
]
headers["user-agent"]: random.choice(user_agents)
response = requests.get(url, headers=headers)
Schließlich können Sie die gescrapten Daten zur späteren Verwendung in einer CSV-Datei speichern. Dies ist besonders nützlich, um große Datensätze zu speichern oder die Daten offline zu analysieren.
import csv
# Zu speichernde Daten
data = [
["URL", "Title", "Live Price", "Date & Time", "Open Price", "Previous Close", "Day's Range", "52 Week Range", "Volume", "Avg. Volume"],
[url, title, live_price, date_time, open_price, previous_close, days_range, week_52_range, volume, avg_volume]
]
# In CSV-Datei speichern
with open("yahoo_finance_data.csv", "w", newline="") as file:
writer = csv.writer(file)
writer.writerows(data)
print("Data saved to yahoo_finance_data.csv")
Nachfolgend finden Sie das vollständige Python-Skript, in das alle besprochenen Schritte integriert sind. Dazu gehören das Senden von Anfragen mit Headern, die Verwendung von Proxys, das Extrahieren von Daten mit XPath und das Speichern der Daten in einer CSV-Datei.
import requests
from lxml import html
import random
import csv
# Beispiel-URL zum Scrapen
url = "https://finance.yahoo.com/quote/AMZN/"
# Liste der User-Agent-Zeichenfolgen für rotierende Kopfzeilen
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
# Add more User-Agent strings here
]
# Kopfzeilen zur Nachahmung eines echten Browsers
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'User-agent': random.choice(user_agents),
}
# Beispiel für die Verwendung eines Proxys
proxies = {
"http": "http://your.proxy.server:port",
"https": "https://your.proxy.server:port"
}
# Senden Sie die HTTP-Anfrage mit Headern und optionalen Proxys
response = requests.get(url, headers=headers, proxies=proxies)
# Prüfen, ob die Anfrage erfolgreich war
if response.status_code == 200:
# Analysieren Sie den HTML-Inhalt
parser = html.fromstring(response.content)
# Daten mit XPath extrahieren
title = ' '.join(parser.xpath('//h1[@class="yf-3a2v0c"]/text()'))
live_price = parser.xpath('//fin-streamer[@class="livePrice yf-mgkamr"]/span/text()')[0]
date_time = parser.xpath('//div[@slot="marketTimeNotice"]/span/text()')[0]
open_price = parser.xpath('//ul[@class="yf-tx3nkj"]/li[2]/span[2]/fin-streamer/text()')[0]
previous_close = parser.xpath('//ul[@class="yf-tx3nkj"]/li[1]/span[2]/fin-streamer/text()')[0]
days_range = parser.xpath('//ul[@class="yf-tx3nkj"]/li[5]/span[2]/fin-streamer/text()')[0]
week_52_range = parser.xpath('//ul[@class="yf-tx3nkj"]/li[6]/span[2]/fin-streamer/text()')[0]
volume = parser.xpath('//ul[@class="yf-tx3nkj"]/li[7]/span[2]/fin-streamer/text()')[0]
avg_volume = parser.xpath('//ul[@class="yf-tx3nkj"]/li[8]/span[2]/fin-streamer/text()')[0]
# Drucken der extrahierten Daten
print(f"Title: {title}")
print(f"Live Price: {live_price}")
print(f"Date & Time: {date_time}")
print(f"Open Price: {open_price}")
print(f"Previous Close: {previous_close}")
print(f"Day's Range: {days_range}")
print(f"52 Week Range: {week_52_range}")
print(f"Volume: {volume}")
print(f"Avg. Volume: {avg_volume}")
# Speichern der Daten in einer CSV-Datei
data = [
["URL", "Title", "Live Price", "Date & Time", "Open Price", "Previous Close", "Day's Range", "52 Week Range", "Volume", "Avg. Volume"],
[url, title, live_price, date_time, open_price, previous_close, days_range, week_52_range, volume, avg_volume]
]
with open("yahoo_finance_data.csv", "w", newline="") as file:
writer = csv.writer(file)
writer.writerows(data)
print("Data saved to yahoo_finance_data.csv")
else:
print(f"Failed to retrieve data. Status code: {response.status_code}")
Das Scraping von Yahoo Finance-Daten mit Python ist eine leistungsstarke Möglichkeit, die Erfassung von Finanzdaten zu automatisieren. Mit den Bibliotheken requests und lxml sowie den richtigen Headern, Proxies und Anti-Bot-Maßnahmen können Sie Börsendaten effizient auslesen und für die Analyse speichern. In diesem Leitfaden wurden die Grundlagen behandelt. Denken Sie jedoch daran, beim Scrapen von Websites die rechtlichen und ethischen Richtlinien einzuhalten.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bemerkungen: 0