Insbesondere Social-Media-Plattformen bieten eine Fülle von Informationen, die Sie für Ihre Marktforschung, Wettbewerbsanalyse, Ihr Reputationsmanagement und Ihren Kundenservice nutzen können. Wenn Sie diese Daten durch Web Scraping nutzen, kann Ihr Unternehmen fundierte Entscheidungen treffen, sein Markenimage verbessern und sich einen Wettbewerbsvorteil auf dem Markt verschaffen.
Mit Web Scraping können Sie effizient durch Webseiten navigieren, bestimmte Daten auswählen und sie in ein strukturiertes Format extrahieren, z. B. in eine CSV- oder JSON-Datei.
In dieser Anleitung erfahren Sie, wie Sie mit Python auf zahlreichen Plattformen Social-Media-Daten scrapen können. Python ist weithin als leistungsfähiges Tool für das Web Scraping bekannt, da es über eine Vielzahl von Bibliotheken verfügt, die das Parsen, Extrahieren und Zusammenführen verschiedener Datentypen erleichtern.
Scrapen sozialer Medien mit Python
Bevor Sie mit dieser Anleitung beginnen, benötigen Sie Folgendes:
- Python: die Programmiersprache, die in dieser Schritt-für-Schritt-Anleitung verwendet wird.
- pip: der Paketmanager für Python. Er hilft Ihnen, Ihre Python-spezifischen Bibliotheken zu erhalten.
- Beautiful Soup: ein nützliches Python-Paket zum Parsen und Extrahieren von Daten aus HTML- und XML-Dateien. Informationen zum Herunterladen finden Sie in dieser Dokumentation.
- Selenium: ein Framework zur Ausführung von Operationen auf einem Webbrowser. Er ist besonders hilfreich, um einen echten Browser zu simulieren, mit dem Sie dynamische und JavaScript-fähige Websites rendern und parsen können. Weitere Informationen über die Installation von Selenium finden Sie in der offiziellen Dokumentation.
Im Rahmen dieser Anleitung richten Sie zunächst Ihre Python-Umgebung ein. Dazu installieren Sie die entsprechenden Pakete und führen dann die Python-Dateien aus, um das Internet zu scrapen. Das Problem ist jedoch, dass Social-Media-Plattformen wie Facebook und Instagram häufig Blocker für Scraping-Bots haben, die unter anderem Anmeldedaten verlangen, nützliche Daten hinter Schaltflächen und dynamischen Inhalten verbergen oder JavaScript zur Anzeige ihrer Daten verwenden. Zur Umgehung dieser Maßnahmen benutzen Sie Selenium und beschränken Ihr Scraping auf öffentlich zugängliche Websites. So benötigen Sie keine Anmeldedaten.
Der vollständige Code für diese Anleitung steht in diesem GitHub-Repository zur Verfügung.
Scrapen von Facebook mit Python
Der erste Schritt beim Web Scraping besteht darin, die Website, die Sie parsen möchten, zu analysieren. Sie müssen genau festlegen, welche Daten Sie benötigen, welche Wege Ihr Bot nehmen soll und welche spezifischen Selektoren für die gewünschten Daten verwendet werden sollen.
Wenn Sie sich zum Beispiel das öffentlich zugängliche Facebook-Profil von Tom Cruise ansehen, finden Sie Informationen über ihn, Links zu seinen anderen Websites, Beiträge, auf denen er für seine Filme wirbt, und verschiedene Medien, die mit diesen verbunden sind. Alle Informationen, die Sie auf dieser Seite sehen, sind öffentlich zugänglich und können gescrapt werden.
Um die Inhalte von Tom Cruise’s Beiträgen zu scrapen, müssen Sie die Seite auf Selektoren untersuchen, die in den Beiträgen, an denen Sie interessiert sind, verwendet werden:
Sobald Sie Selektoren gefunden haben, die die benötigten Daten isolieren, können Sie mit dem Schreiben des Scraping-Codes beginnen. Öffnen Sie eine Python-Datei (.py
) und importieren Sie die Pakete, die Sie verwenden möchten: Selenium, um auf den Inhalt Ihrer HTML-Seite zuzugreifen, Beautiful Soup, um die spezifischen Daten zu parsen und zu extrahieren, und Pandas zur Strukturierung und Bereinigung des endgültigen Datensatzes:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd
Legen Sie dann die Seite fest, die Sie scrapen möchten, und fügen Sie Optionen zu Selenium hinzu, um einen echten Benutzer zu imitieren und zu vermeiden, dass Ihr Crawler blockiert wird:
# Define the URL you want to scrape
url = 'https://www.facebook.com/officialtomcruise/'
# Define the options for the Chrome webdriver
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')
# Create a new instance of the Chrome webdriver with the defined options
driver = webdriver.Chrome(options=options)
# Load the Facebook page in the webdriver
driver.get(url)
An dieser Stelle haben Sie die gesamte Seite extrahiert. Das Format ist jedoch nicht von Menschen lesbar. Um das zu ändern und um den gewünschten Text mithilfe des zuvor isolierten Selektors zu extrahieren, verwenden Sie Beautiful Soup:
# Extract the HTML content of the page using BeautifulSoup
html_content = driver.page_source
soup = BeautifulSoup(html_content, 'html.parser')
posts = soup.find_all('div', class_='x1l90r2v')
# Extract the text content of each post
post_content = [post.text for post in posts]
# Save the scraped data in a CSV file
data = pd.DataFrame({'post_content': post_content})
data.to_csv('facebook_posts.csv', index=False)
# Print the scraped data
print(data)
# Close the webdriver
driver.quit()
Sobald Sie die benötigten Daten isoliert haben, können Sie diese als DataFrame strukturieren (oder eine andere Struktur wählen, die Ihnen zusagt). Ein DataFrame ist eine häufig verwendete Datenstruktur, da sie Ihre Daten in Tabellen anzeigt:
Scrapen von Twitter mit Python
Nachdem Sie nun Facebook gescrapt haben, scrapen Sie jetzt Twitter und gehen dabei genauso vor.
Analysieren Sie Tom Cruise’s Twitter-Seite und isolieren Sie einen Selektor, der für die von Ihnen gewünschten Daten verwendet werden kann:
In diesem Beispiel werden Sie beispielsweise den Text aller seiner Tweets scrapen. Ein Blick in den Code der Website zeigt das Attribut data-testid = tweetText
, das verwendet werden kann, um den Text effizient zu extrahieren.
Es ist wichtig, dass Sie die verschiedenen Verhaltensweisen der Website kennen. So verwendet Twitter beispielsweise JavaScript und führt damit eine Funktion zum endlosen Scrollen (en: infinite scroll) ein. Das bedeutet, dass immer mehr Daten angezeigt werden, wenn Sie die Seite nach unten scrollen. Wenn Sie versuchen, den Inhalt direkt nach dem Laden der Seite zu scrapen, erhalten Sie möglicherweise nicht alle erforderlichen Daten oder eine Ausnahme.
Um das zu vermeiden, können Sie Ihren Bot entweder so konfigurieren, dass er eine bestimmte Zeit wartet, bevor er mit dem Scrapen des Inhalts beginnt, oder Sie sorgen dafür, dass die Seite ausreichend nach unten gescrollt wird, um alle erforderlichen Daten zu erhalten.
Erstellen Sie erneut eine Python-Datei und verwenden Sie den folgenden Code, um den gewünschten Inhalt zu scrapen:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.common.by import By
import time
# Define the URL you want to scrape
url = 'https://twitter.com/TomCruise'
# Define the options for the Chrome webdriver to mimic a real page
options = Options()
options.add_argument('--headless')
options.add_argument("--incognito")
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')
options.add_argument("--enable-javascript")
# Create a new instance of the Chrome webdriver with the defined options
driver = webdriver.Chrome(options=options)
# Load the Twitter page in the webdriver
driver.get(url)
# Wait for tweets to populate the page
try:
WebDriverWait(driver, 60).until(expected_conditions.presence_of_element_located(
(By.CSS_SELECTOR, '[data-testid="tweet"]')))
except WebDriverException:
print("Something happened. No tweets loaded")
# scroll a bit for more tweets to appear
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(10)
# Extract the HTML content of the page using BeautifulSoup
html_content = driver.page_source
soup = BeautifulSoup(html_content, 'html.parser')
posts = soup.find_all(attrs={"data-testid": "tweetText"})
# Extract the text content of each post
post_content = [post.text for post in posts]
# Save the scraped data in a CSV file
data = pd.DataFrame({'post_content': post_content})
data.to_csv('twitter_posts.csv', index=False)
# Print the scraped data
print(data)
# Close the webdriver
driver.quit()
Scrapen von Instagram mit Python
Abschließend sehen wir uns an, wie Sie Instagram scrapen können.
Tom Cruise’s Instagram-Seite präsentiert sich als Mediengalerie, in der nur Bilder und Videos verfügbar sind, wenn Sie nicht angemeldet sind. Aus der Analyse der Seite geht jedoch hervor, dass der alternative Medientext in den meisten Fällen auch den Inhalt des Beitrags enthält. Das bedeutet, dass Sie die URL der Mediendateien und und deren alternative Beschreibungen direkt auf dieser Seite scrapen können:
Dazu müssen Sie nur die Selektoren für die gewünschten Daten finden und DataFrame strukturieren, damit Sie Ihre Daten erfassen können:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd
# Define the URL you want to scrape
url = 'https://www.instagram.com/tomcruise'
# Define the options for the Chrome webdriver
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')
# Create a new instance of the Chrome webdriver with the defined options
driver = webdriver.Chrome(options=options)
# Load the Instagram page in the webdriver
driver.get(url)
# Extract the HTML content of the page using BeautifulSoup
html_content = driver.page_source
soup = BeautifulSoup(html_content, 'html.parser')
# Collect instagram links
links = soup.find_all('a', href= True)
# Limit the collected links to posts data
posts = []
for i in links :
if '/p/' in i:
posts.append(i)
# Save the scraped data in a CSV file
data = pd.DataFrame({'post_links': posts})
data.to_csv('instagram_posts.csv', index=False)
# Print the scraped data
print(data)
# Close the webdriver
driver.quit()
Web Scraping sozialer Medien mit Bright Data
Web Scraping kann zeitaufwändig und mühsam sein, aber das muss nicht so sein.
Bright Data ist eine Webplattform, die es Unternehmen ermöglicht, auf einfache Weise Zugang zu großen Mengen öffentlich verfügbarer strukturierter Daten aus dem Internet zu erhalten. Diese kuratierten Daten sind in Form von Social-Media-Datensätzen leicht zugänglich. Diese Datensätze enthalten eine Fülle von Daten – Nutzerprofile, Beiträge und Kommentare – auf die Sie zugreifen können, ohne die Daten selbst scrapen zu müssen.
Wenn Sie außerdem Daten aus anderen Quellen abrufen möchten, sind die Tools von Bright Data Web Scraper IDE und Web Unlocker äußerst hilfreich. Sie werden mit vorgefertigten Vorlagen geliefert, damit Sie nicht so viele Codes schreiben müssen, und sie verfügen über integrierte Proxys, die Ihnen helfen, auf regional gesperrte Inhalte zuzugreifen und CAPTCHAs zu bewältigen.
Die Verwendung von Bright Data zum Scrapen von Social-Media-Daten kann eine effizientere und zuverlässigere Wahl sein, als selbst Daten zu erfassen. Darüber hinaus bietet Bright Data ein umfangreiches Proxy-Netzwerk, mit dem Sie beim Scrapen von Social-Media-Plattformen Ratenbeschränkungen umgehen und IP-Sperren verhindern können.
Fazit
In diesem Artikel haben Sie die Grundlagen des Web Scraping kennengelernt und erfahren, wie Sie mit Python Social-Media-Daten aus Plattformen wie Facebook, Twitter und Instagram extrahieren können. Wir haben auch die wichtigsten Faktoren analysiert, die beim manuellen Scrapen von Social-Media-Websites zu beachten sind, und wir haben Bright Data als Lösung für das Web Scraping vorgestellt, insbesondere für die Extraktion von Daten aus sozialen Medien.
Mit Web Scraping können Daten aus sozialen Medien für die Marktforschung sowie für Stimmungs- und Trendanalysen erfasst werden. Allerdings müssen Sie beim Web Scraping ethische Gesichtspunkte beachten und die Nutzungsbedingungen der Websites und der sozialen Netzwerke, die Sie scrapen, befolgen. Vergewissern Sie sich, dass die Daten, die Sie scrapen, öffentlich zugänglich sind und dass Sie nicht gegen Datenschutzgesetze verstoßen. Die von Bright Data angebotenen Tools sind besonders nützlich, da sie Ihnen helfen, die rechtlichen und ethischen Bedenken im Zusammenhang mit Data Scraping zu beachten.