Das Extrahieren von Artikeln aus Medium kann für Zwecke wie die Bewertung von Inhalten, das Sammeln von Daten oder die Überwachung von Autoren und ihren Werken von größter Bedeutung sein. In diesem Tutorial lernen wir, wie man Medium - eine Artikel-Website für Autoren - mit der Programmiersprache Python scrapen kann. Wir werden besprechen, wie Daten wie der Titel des Artikels, der Name des Autors, der Name der Veröffentlichung und der Textkörper selbst aus einer gegebenen Web-URL eines Medium-Artikels extrahiert werden können.
Für dieses Tutorial werden wir diesen Artikel auf Medium auslesen: "9 Python Built-in Decorators That Optimize Your Code Significant".
Bevor Sie beginnen, installieren Sie die folgenden Bibliotheken:
Installieren Sie sie mit den folgenden Befehlen:
pip install requests
pip install lxml
pip install pandas
Medium setzt Techniken zur Bot-Erkennung ein, um unautorisiertes Scraping zu verhindern. Korrekte Header und Proxys sind entscheidend für die Vermeidung von Bot-Erkennung und für verantwortungsvolles Scraping.
Kopfzeilen: Diese simulieren eine Anfrage, als ob sie von einem echten Browser käme. Sie enthalten Informationen wie den Browsertyp, akzeptierte Inhaltstypen und das Caching-Verhalten.
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': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'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/129.0.0.0 Safari/537.36',
}
Proxies: Proxies können Ihre IP-Adresse maskieren, indem sie sie regelmäßig wechseln, um die Wahrscheinlichkeit zu verringern, dass die Anfragen von Medium blockiert werden. Hier ist ein Beispiel für die Verwendung mit IP-Adressen-Authentifizierung:
proxies = {
'http': 'IP:PORT',
'https': 'IP:PORT'
}
response = requests.get(
'https://medium.com/techtofreedom/9-python-built-in-decorators-that-optimize-your-code-significantly-bc3f661e9017',
headers=headers,
proxies=proxies
)
So richten Sie die Kopfzeilen ein und senden eine Anfrage an die URL des Artikels:
import requests
# Header, um eine echte Browser-Anfrage zu simulieren
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': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'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/129.0.0.0 Safari/537.36',
}
url = 'https://medium.com/techtofreedom/9-python-built-in-decorators-that-optimize-your-code-significantly-bc3f661e9017'
response = requests.get(url, headers=headers)
Sobald wir den Seiteninhalt haben, können wir ihn analysieren und relevante Informationen extrahieren.
Wir werden lxml verwenden, um die HTML-Antwort zu analysieren und bestimmte Elemente zu extrahieren. So geht's:
from lxml.html import fromstring
parser = fromstring(response.text)
# Daten extrahieren
title = parser.xpath('//h1[@data-testid="storyTitle"]/text()')[0]
author = parser.xpath('//a[@data-testid="authorName"]/text()')[0]
publication_name = parser.xpath('//a[@data-testid="publicationName"]/p/text()')[0]
publication_date = parser.xpath('//span[@data-testid="storyPublishDate"]/text()')[0]
content = '\n '.join(parser.xpath('//div[@class="ci bh ga gb gc gd"]/p/text()'))
auth_followers = parser.xpath('//span[@class="pw-follower-count bf b bg z bk"]/a/text()')[0]
sub_title = parser.xpath('//h2[@id="1de6"]/text()')[0]
Jetzt erstellen wir ein Wörterbuch, das alle extrahierten Daten enthält. Das erleichtert das Speichern in einer CSV-Datei.
# Daten in einem Wörterbuch speichern
article_data = {
'Title': title,
'Author': author,
'Publication': publication_name,
'Date': publication_date,
'Followers': auth_followers,
'Subtitle': sub_title,
'Content': content,
}
print(article_data)
Zum Schluss speichern wir die Daten in einer CSV-Datei, um sie weiter zu analysieren oder aufzubewahren.
import pandas as pd
# Wörterbuch in DataFrame umwandeln und als CSV speichern
df = pd.DataFrame([article_data])
df.to_csv('medium_article_data.csv', index=False)
print("Data saved to medium_article_data.csv")
Hier ist der komplette Code zum Scrapen der Medium-Artikeldaten:
import requests
from lxml.html import fromstring
import pandas as pd
# Kopfzeilen zur Nachahmung eines 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': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'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/129.0.0.0 Safari/537.36',
}
proxies = {
'http': 'IP:PORT',
'https': 'IP:PORT'
}
# Anfordern der Seite
url = 'https://medium.com/techtofreedom/9-python-built-in-decorators-that-optimize-your-code-significantly-bc3f661e9017'
response = requests.get(url, headers=headers, proxies=proxies)
# Parsen der Seite
parser = fromstring(response.text)
# Daten extrahieren
title = parser.xpath('//h1[@data-testid="storyTitle"]/text()')[0]
author = parser.xpath('//a[@data-testid="authorName"]/text()')[0]
publication_name = parser.xpath('//a[@data-testid="publicationName"]/p/text()')[0]
publication_date = parser.xpath('//span[@data-testid="storyPublishDate"]/text()')[0]
content = '\n '.join(parser.xpath('//div[@class="ci bh ga gb gc gd"]/p/text()'))
auth_followers = parser.xpath('//span[@class="pw-follower-count bf b bg z bk"]/a/text()')[0]
sub_title = parser.xpath('//h2[@id="1de6"]/text()')[0]
# Speichern von Daten
article_data = {
'Title': title,
'Author': author,
'Publication': publication_name,
'Date': publication_date,
'Followers': auth_followers,
'Subtitle': sub_title,
'Content': content,
}
# In CSV speichern
df = pd.DataFrame([article_data])
df.to_csv('medium_article_data.csv', index=False)
print("Data saved to medium_article_data.csv")
Das Scraping von Inhalten von Medium sollte verantwortungsvoll erfolgen. Eine übermäßige Belastung der Server durch Anfragen kann die Leistung des Dienstes beeinträchtigen, und das Scraping von Daten ohne Erlaubnis kann gegen die Nutzungsbedingungen der Website verstoßen. Überprüfen Sie immer die robots.txt-Datei und die Nutzungsbedingungen, bevor Sie eine Website scrapen.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bemerkungen: 0