Wenn Sie direkt auf das Internet zugreifen, können Websites Ihre Anfragen leicht zu Ihrer IP-Adresse zurückverfolgen. Diese Exposition kann zu gezielter Werbung und Online-Tracking führen und möglicherweise Ihre digitale Identität gefährden.
Hier kommen Proxys ins Spiel. Sie fungieren als Vermittler zwischen Ihrem Computer und dem Internet und helfen Ihnen, Ihre digitale Identität zu schützen. Wenn Sie einen Proxy-Server verwenden, sendet er in Ihrem Namen Anfragen an Websites, wobei die eigene IP-Adresse des Proxys verwendet wird.
Wenn es um Web Scraping geht, können Proxys Ihnen helfen, IP-Sperren zu umgehen, Geoblocking zu vermeiden und Ihre Identität zu schützen. In diesem Artikel erfahren Sie, wie Sie Proxys in C# für all Ihre Web-Scraping-Projekte implementieren.
Voraussetzungen
Bevor Sie mit diesem Tutorial beginnen, stellen Sie sicher, dass Sie über Folgendes verfügen:
- Visual Studio 2022 oder Visual Studio Code
- .NET 7 oder neuer
- HtmlAgilityPack NuGet-Paket
Die Beispiele in diesem Artikel verwenden eine separate .NET-Konsolenanwendung. Um deine eigene zu erstellen, kannst du eine der folgenden Anleitungen verwenden:
- Erstellung einer .NET-Konsolenanwendung mit Visual Studio Code
- Erstellung einer .NET-Konsolenanwendung mit Visual Studio
Um loszulegen, müssen Sie zwei Konsolenanwendungen erstellen, WebScrapApp
und WebScrapBrightData
:
Für Web Scraping, insbesondere wenn Sie mit HTML-Inhalten zu tun haben, benötigen Sie spezielle Tools wie das HtmlAgilityPack. Diese Bibliothek vereinfacht das Parsen und die Manipulation von HTML und erleichtert so die Extraktion von Daten aus Webseiten.
Fügen Sie in beiden Projekten (d. h. WebScrapApp
und WebScrapBrightData
) das NuGet-Paket HtmlAgilityPack hinzu, indem Sie mit der rechten Maustaste auf den NuGet-Ordner und dann auf NuGet-Pakete verwalten klicken. Wenn ein Popup-Fenster erscheint, suchen Sie nach „HtmlAgilityPack“ und installieren Sie es für beide Projekte:
Um eines der folgenden Projekte auszuführen, müssen Sie in der Eingabeaufforderung zum Projektverzeichnis navigieren und cd path\to\your\project
gefolgt von dotnet run
verwenden. Alternativ können Sie F5 drücken, um das Projekt in Visual Studio zu erstellen und auszuführen. Beide Methoden kompilieren und führen Ihre Anwendung aus und zeigen die Ausgabe entsprechend an.
Hinweis: Wenn Sie nicht über Visual Studio 2022 verfügen, können Sie jede andere IDE verwenden, die .NET 7 unterstützt. Beachten Sie jedoch, dass einige Schritte in dieser Anleitung abweichen können.
So richten Sie einen lokalen Proxy ein
Wenn es um Web Scraping geht, müssen Sie zunächst einen Proxy-Server verwenden. Dieses Tutorial verwendet den Open-Source-Proxy mitmproxy.
Navigieren Sie zunächst zu den mitmproxy-Downloads, laden Sie Version 10.1.6 herunter und wählen Sie die richtige Version für Ihr Betriebssystem aus. Weitere Hilfe finden Sie in der offiziellen mitmproxy-Installationsanleitung.
Sobald Sie mitmproxy installiert haben, starten Sie es, indem Sie den folgenden Befehl in Ihrem Terminal eingeben:
mitmproxy
Sie sollten ein Fenster in Ihrer Shell oder Ihrem Terminal sehen, das wie folgt aussieht:
Um den Proxy zu testen, öffnen Sie ein anderes Terminal oder eine Shell und führen Sie die folgende cURL-Anfrage aus:
curl --proxy http://localhost:8080 "http://wttr.in/Dunedin?0"
Ihre Ausgabe sollte so aussehen:
Weather report: Dunedin
Cloudy
.--. +11(9) °C
.-( ). ↙ 15 km/h
(___.__)__) 10 km
0.0 mm
Im mitmproxy-Fenster sollten Sie sehen, dass der Aufruf über den lokalen Proxy abgefangen wurde:
Web Scraping
Im folgenden Abschnitt richten Sie die C#-Konsolenanwendung WebScrapApp
für Web Scraping ein. Diese Anwendung verwendet den Proxy-Server und beinhaltet eine Proxy-Rotation für mehr Effizienz.
Einen HttpClient erstellen
Die ProxyHttpClient
-Klasse wurde entwickelt, um eine HttpClient
-Instanz so zu konfigurieren, dass Anfragen über einen angegebenen Proxy-Server weitergeleitet werden.
Erstellen Sie unter Ihrem WebScrapApp
-Projekt eine neue Klassendatei mit dem Namen ProxyHttpClient.cs
und fügen Sie den folgenden Code hinzu:
namespace WebScrapApp
{
public class ProxyHttpClient
{
public static HttpClient CreateClient(string proxyUrl)
{
var httpClientHandler = new HttpClientHandler()
{
Proxy = new WebProxy(proxyUrl),
UseProxy = true
};
return new HttpClient(httpClientHandler);
}
}
}
Proxy-Rotation implementieren
Um die Proxy-Rotation zu implementieren, erstellen Sie eine ProxyRotator.cs
-Klassendatei unter Ihrer WebScrapApp
-Lösung:
namespace WebScrapApp
{
public class ProxyRotator
{
private List<string> _validProxies = new List<string>();
private readonly Random _random = new();
public ProxyRotator(string[] proxies, bool isLocal)
{
if (isLocal)
{
_validProxies.Add("http://localhost:8080/");
}
else
{
_validProxies = ProxyChecker.GetWorkingProxies(proxies.ToList()).Result;
}
if (_validProxies.Count == 0)
throw new InvalidOperationException();
}
public HttpClient ScrapeDataWithRandomProxy(string url)
{
if (_validProxies.Count == 0)
throw new InvalidOperationException();
var proxyUrl = _validProxies[_random.Next(_validProxies.Count)];
return ProxyHttpClient.CreateClient(proxyUrl);
}
}
}
Diese Klasse verwaltet eine Liste von Proxys und bietet eine Methode zur zufälligen Auswahl eines Proxys für jede Webanfrage. Diese Randomisierung ist der Schlüssel zur Verringerung des Erkennungsrisikos und potenzieller IP-Sperren beim Web Scraping.
Wenn IsLocal
auf True
gesetzt ist, wird der lokale Proxy von mitmproxy übernommen. Wenn auf False
gesetzt, werden die öffentlichen IPs der Proxys verwendet.
Der ProxyChecker
wird verwendet, um die Liste der Proxy-Server zu validieren.
Erstellen Sie als Nächstes eine neue Klassendatei mit dem Namen ProxyChecker.cs
und fügen Sie den folgenden Code hinzu:
using WebScrapApp;
namespace WebScrapApp
{
public class ProxyChecker
{
private static SemaphoreSlim consoleSemaphore = new SemaphoreSlim(1, 1);
private static int currentProxyNumber = 0;
public static async Task<List<string>> GetWorkingProxies(List<string> proxies)
{
var tasks = new List<Task<Tuple<string, bool>>>();
foreach (var proxyUrl in proxies)
{
tasks.Add(CheckProxy(proxyUrl, proxies.Count));
}
var results = await Task.WhenAll(tasks);
var workingProxies = new List<string>();
foreach (var result in results)
{
if (result.Item2)
{
workingProxies.Add(result.Item1);
}
}
return workingProxies;
}
private static async Task<Tuple<string, bool>> CheckProxy(string proxyUrl, int totalProxies)
{
var client = ProxyHttpClient.CreateClient(proxyUrl);
bool isWorking = await IsProxyWorking(client);
await consoleSemaphore.WaitAsync();
try
{
currentProxyNumber++;
Console.WriteLine($"Proxy: {currentProxyNumber} de {totalProxies}");
}
finally
{
consoleSemaphore.Release();
}
return new Tuple<string, bool>(proxyUrl, isWorking);
}
private static async Task<bool> IsProxyWorking(HttpClient client)
{
try
{
var testUrl = "http://www.google.com";
var response = await client.GetAsync(testUrl);
return response.IsSuccessStatusCode;
}
catch
{
return false;
}
}
}
}
Dieser Code definiert den ProxyChecker
für die Validierung einer Liste von Proxy-Servern. Wenn Sie die getWorkingProxies
-Methode mit einer Liste von Proxy-URLs verwenden, überprüft sie den Status jedes Proxys asynchron über die checkProxy
-Methode und sammelt betriebsbereite Proxys in einer WorkingProxies
-Liste. Richten Sie innerhalb von CheckProxy
einen HttpClient
mit der Proxy-URL ein, stellen eine Testanfrage an http://www.google.com und zeichnen Sie den Fortschritt sicher über eine Semaphore auf.
Die isProxyWorking
-Methode bestätigt die Funktionalität des Proxys, indem sie den Antwortstatuscode untersucht und true
für betriebsbereite Proxys zurückgibt. Diese Klasse hilft dabei, funktionierende Proxys aus einer bestimmten Liste zu identifizieren.
Webdaten scrapen
Um Daten zu scrapen, erstellen Sie eine neue WebScraper.cs
-Klassendatei unter Ihrer WebScrapApp
-Lösung und fügen Sie den folgenden Code hinzu:
using HtmlAgilityPack;
namespace WebScrapApp
{
public class WebScraper
{
public static async Task ScrapeData(ProxyRotator proxyRotator, string url)
{
try
{
var client = proxyRotator.ScrapeDataWithRandomProxy(url);
// Use HttpClient to make an asynchronous GET request
var response = await client.GetAsync(url);
var content = await response.Content.ReadAsStringAsync();
// Load the HTML content into an HtmlDocument
HtmlDocument doc = new();
doc.LoadHtml(content);
// Use XPath to find all <a> tags that are direct children of <li>, <p>, or <td>
var nodes = doc.DocumentNode.SelectNodes("//li/a[@href] | //p/a[@href] | //td/a[@href]");
if (nodes != null)
{
foreach (var node in nodes)
{
string hrefValue = node.GetAttributeValue("href", string.Empty);
string title = node.InnerText; // This gets the text content of the <a> tag, which is usually the title
// Since Wikipedia URLs are relative, we need to convert them to absolute
Uri baseUri = new(url);
Uri fullUri = new(baseUri, hrefValue);
Console.WriteLine($"Title: {title}, Link: {fullUri.AbsoluteUri}");
// You can process each title and link as required
}
}
else
{
Console.WriteLine("No article links found on the page.");
}
// Add additional logic for other data extraction as needed
}
catch (Exception ex)
{
throw ex;
}
}
}
}
In diesem Code definieren Sie den WebScraper
, der die Web-Scraping-Funktionalität kapselt. Wenn Sie die scrapeData
-Methode aufrufen, stellen Sie ihr eine ProxyRotator
-Instanz und eine Ziel-URL zur Verfügung. Innerhalb dieser Methode verwenden Sie einen HttpClient
, um eine asynchrone GET-Anfrage an die URL zu stellen, den HTML-Inhalt abzurufen und ihn mithilfe der HtmlAgilityPack-Bibliothek zu analysieren. Verwenden Sie anschließend XPath-Abfragen, um Links und entsprechende Titel aus bestimmten HTML-Elementen zu finden und zu extrahieren. Wenn Artikellinks gefunden werden, drucken Sie deren Titel und absolute URLs aus. Andernfalls drucken Sie eine Meldung, dass keine Links gefunden wurden.
Nachdem Sie den Proxy-Rotationsmechanismus konfiguriert und die Web-Scraping-Funktionalität implementiert haben, müssen Sie diese Komponenten nahtlos in den primären Einstiegspunkt der Anwendung integrieren, der sich normalerweise in Program.cs
befindet. Diese Integration ermöglicht es der Anwendung, Web-Scraping-Aufgaben auszuführen und gleichzeitig rotierende Proxys zu verwenden, wobei der Schwerpunkt auf dem Scraping von Daten von der Wikipedia-Startseite liegt:
namespace WebScrapApp {
public class Program
{
static async Task Main(string[] args)
{
string[] proxies = {
"http://162.223.89.84:80",
"http://203.80.189.33:8080",
"http://94.45.74.60:8080",
"http://162.248.225.8:80",
"http://167.71.5.83:3128"
};
var proxyRotator = new ProxyRotator(proxies, false);
string urlToScrape = "https://www.wikipedia.org/";
await WebScraper.ScrapeData(proxyRotator, urlToScrape);
}
}
}
In diesem Code initialisiert die Anwendung eine Liste von Proxy-URLs, erstellt eine ProxyRotator
-Instanz, gibt die Ziel-URL für das Scraping an (in diesem Fall https://www.wikipedia.org/
) und ruft die webscraper.scrapeData
-Methode auf, um den Web-Scraping-Prozess zu starten.
Die Anwendung verwendet eine Liste von freien Proxy-IPs, die im Proxy-Array angegeben sind, um Web-Scraping-Anfragen weiterzuleiten, die vertrauenswürdige Quelle zu maskieren und das Risiko zu minimieren, vom Wikipedia-Server blockiert zu werden. Die Methode scrapeData
ist so eingestellt, dass sie die Wikipedia-Startseite scrapt, um Artikeltitel und Links in der Konsole zu extrahieren und anzuzeigen. Die ProxyRotator
-Klasse übernimmt die Rotation dieser Proxys und erhöht so die Diskretion des Scrapings.
Ausführen der WebScrapApp
Um die WebScrapApp
auszuführen, öffnen Sie ein neues Terminal oder eine neue Shell im Stammverzeichnis Ihrer WebScrapApp
-Anwendung und führen Sie die folgenden Befehle aus:
dotnet build
dotnet run
Ihre Ausgabe sollte so aussehen:
…output omitted…
Title: Latina, Link: https://la.wikipedia.org/
Title: Latviešu, Link: https://lv.wikipedia.org/
Title: Lietuvių, Link: https://lt.wikipedia.org/
Title: Magyar, Link: https://hu.wikipedia.org/
Title: Македонски, Link: https://mk.wikipedia.org/
Title: Bahasa Melayu, Link: https://ms.wikipedia.org/
Title: Bahaso Minangkabau, Link: https://min.wikipedia.org/
Title: bokmål, Link: https://no.wikipedia.org/
Title: nynorsk, Link: https://nn.wikipedia.org/
Title: Oʻzbekcha / Ўзбекча, Link: https://uz.wikipedia.org/
Title: Қазақша / Qazaqşa / قازاقشا, Link: https://kk.wikipedia.org/
Title: Română, Link: https://ro.wikipedia.org/
Title: Simple English, Link: https://simple.wikipedia.org/
Title: Slovenčina, Link: https://sk.wikipedia.org/
Title: Slovenščina, Link: https://sl.wikipedia.org/
Title: Српски / Srpski, Link: https://sr.wikipedia.org/
Title: Srpskohrvatski / Српскохрватски, Link: https://sh.wikipedia.org/
Title: Suomi, Link: https://fi.wikipedia.org/
Title: தமிழ், Link: https://ta.wikipedia.org/
…output omitted…
Wenn die scrapeData
-Methode der WebScraper
-Klasse aufgerufen wird, wird die Datenextraktion aus Wikipedia durchgeführt, was zu einer Konsolenanzeige der Artikeltitel und der entsprechenden Links führt. Dieser Code verwendet öffentlich verfügbare Proxys, und jedes Mal, wenn Sie die Anwendung ausführen, wählt sie eine der aufgelisteten IP-Adressen als Proxy aus.
Um mit dem lokalen Proxy von mitmproxy zu testen, aktualisieren Sie die ProxyRotator
-Methode in der Program
-Datei mit Folgendem:
var proxyRotator = new ProxyRotator(proxies, true)
string urlToScrape = "http://toscrape.com/";
Wenn Sie den Wert auf true
setzen, wird der lokale Proxy-Server verwendet, der auf Ihrem Localhost-Port 8080 läuft (also der mitmproxy-Server).
Um den Konfigurationsvorgang zu vereinfachen, wenn Sie ein Zertifikat auf Ihrem Computer einrichten, ändern Sie die URL in http://toscrape.com/
.
Stellen Sie sicher, dass der mitmproxy-Server läuft; führen Sie dann dieselben Befehle erneut aus:
dotnet build
dotnet run
Ihre Ausgabe sollte so aussehen:
…output omitted…
Title: fictional bookstore, Link: http://books.toscrape.com/
Title: books.toscrape.com, Link: http://books.toscrape.com/
Title: A website, Link: http://quotes.toscrape.com/
Title: Default, Link: http://quotes.toscrape.com/
Title: Scroll, Link: http://quotes.toscrape.com/scroll
Title: JavaScript, Link: http://quotes.toscrape.com/js
Title: Delayed, Link: http://quotes.toscrape.com/js-delayed
Title: Tableful, Link: http://quotes.toscrape.com/tableful
Title: Login, Link: http://quotes.toscrape.com/login
Title: ViewState, Link: http://quotes.toscrape.com/search.aspx
Title: Random, Link: http://quotes.toscrape.com/random
…output omitted…
Wenn Sie das mitmproxy-Fenster von Ihrem Terminal oder Ihrer Shell aus überprüfen, sollten Sie sehen, dass es den Aufruf abgefangen hat:
Wie Sie sehen, kann das Einrichten eines lokalen Proxys oder der Wechsel zwischen verschiedenen Proxys eine komplexe und zeitaufwändige Aufgabe sein. Zum Glück können Tools wie Bright Data helfen. Im folgenden Abschnitt erfahren Sie, wie Sie den Bright Data-Proxy-Server verwenden, um den Scraping-Prozess zu vereinfachen.
Bright Data-Proxy-Arten
Bright Data bietet ein Netzwerk von Proxy-Services, verfügbar an 195 Standorten. Dieses Netzwerk integriert die Bright Data-Proxy-Rotationsfunktion und wechselt systematisch zwischen Servern, um die Effektivität und Sicherheit von Web Scraping zu verbessern.
Die Verwendung dieses rotierenden Proxy-Systems verringert das Risiko von IP-Sperren oder -Blockierungen, die normalerweise bei Web-Scraping-Aufgaben auftreten. Jede Anfrage verwendet einen anderen Proxy, was die Identität des Scrapers verbirgt und es für Websites schwierig macht, den Zugriff zu erkennen und einzuschränken. Dieser Ansatz erhöht die Zuverlässigkeit der Datenerfassung und gewährleistet eine erhöhte Anonymität und Sicherheit.
Die Bright Data-Plattform wurde für Benutzerfreundlichkeit und unkomplizierte Einrichtung entwickelt und eignet sich daher perfekt für C#-Web-Scraping-Projekte, die Sie im nächsten Abschnitt sehen werden.
Erstellen eines Proxys
Bevor Sie einen Bright Data-Proxy in Ihrem Projekt verwenden können, müssen Sie ein Konto einrichten. Besuchen Sie dazu die Website von Bright Data und melden Sie sich für eine kostenlose Testversion an.
Sobald Sie Ihr Konto eingerichtet haben, melden Sie sich an und klicken Sie links auf das Standortsymbol, um zu Proxys und Scraping-Infrastruktur zu gelangen. Klicken Sie dann auf Hinzufügen und wählen Sie Privatanwender-Proxys:
Behalten Sie die Standardnamen bei und klicken Sie erneut auf Hinzufügen, um einen lokalen Proxy zu erstellen:
Sobald der Proxy erstellt ist, sollten Sie die Anmeldedaten sehen, einschließlich Host, Port, Benutzername und Passwort. Bewahren Sie diese Anmeldedaten an einem sicheren Ort auf, da Sie sie später benötigen werden:
Navigieren Sie von Ihrer IDE oder Ihrem Terminal/Ihrer Shell zu Ihrem WebScrapingBrightData-Projekt. Erstellen Sie dann eine BrightDataProxyConfigurator.cs
-Klassendatei und fügen Sie den folgenden Code hinzu:
using System.Net;
namespace WebScrapBrightData
{
public class BrightDataProxyConfigurator
{
public static HttpClient ConfigureHttpClient(string proxyHost, string proxyUsername, string proxyPassword)
{
var proxy = new WebProxy(proxyHost) {
Credentials = new NetworkCredential(proxyUsername, proxyPassword)
};
var httpClientHandler = new HttpClientHandler() {
Proxy = proxy,
UseProxy = true
};
var client = new HttpClient(httpClientHandler);
client.DefaultRequestHeaders.Add("User-Agent", "YourUserAgent");
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.TryAddWithoutValidation("Proxy-Authorization", Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes($"{proxyUsername}:{proxyPassword}")));
return client;
}
}
}
In diesem Code definieren Sie eine BrightDataProxyConfigurator
-Klasse, die die ConfigureHttpClient
-Methode beinhaltet. Beim Aufruf dieser Methode wird ein HttpClient
konfiguriert und zurückgegeben, der für die Verwendung eines Proxy-Servers eingerichtet ist. Sie erreichen dies, indem Sie eine Proxy-URL mit dem angegebenen Benutzernamen
, Passwort
, Host
und Port
erstellen und dann einen HttpClientHandler
mit diesem Proxy konfigurieren. Die Methode gibt letztendlich eine HttpClient
-Instanz zurück, die alle ihre Anfragen über den angegebenen Proxy weiterleitet.
Erstellen Sie als Nächstes die WebContentScraper.cs
-Klassendatei unter dem Projekt WebScrapingBrightData
und fügen Sie den folgenden Code hinzu:
using HtmlAgilityPack;
namespace WebScrapBrightData
{
public class WebContentScraper
{
public static async Task ScrapeContent(string url, HttpClient client)
{
var response = await client.GetAsync(url);
var content = await response.Content.ReadAsStringAsync();
HtmlDocument doc = new();
doc.LoadHtml(content);
var nodes = doc.DocumentNode.SelectNodes("//li/a[@href] | //p/a[@href] | //td/a[@href]");
if (nodes != null)
{
foreach (var node in nodes)
{
string hrefValue = node.GetAttributeValue("href", string.Empty);
string title = node.InnerText;
Uri baseUri = new(url);
Uri fullUri = new(baseUri, hrefValue);
Console.WriteLine($"Title: {title}, Link: {fullUri.AbsoluteUri}");
}
}
else
{
Console.WriteLine("No article links found on the page.");
}
}
}
}
Dieser Code definiert eine WebContentScraper
-Klasse mit einer statischen asynchronen Methode, scrapeContent
. Diese Methode verwendet eine URL und einen HttpClient, ruft den Inhalt der Webseite ab, analysiert ihn als HTML und extrahiert Links aus bestimmten HTML-Elementen (Listenelemente, Absätze und Tabellenzellen). Anschließend werden die Titel und absoluten URIs dieser Links zur Konsole gedruckt.
Programmklasse
Schauen Sie sich jetzt noch einmal Wikipedia an und sehen Sie, wie Bright Data den Zugriff verbessert und die Anonymität erhöht.
Aktualisieren Sie die Program.cs
-Klassendatei mit dem folgenden Code:
namespace WebScrapBrightData
{
public class Program
{
public static async Task Main(string[] args)
{
// Bright Data Proxy Configuration
string host = "your_brightdata_proxy_host";
string username = "your_brightdata_proxy_username";
string password = "your_brightdata_proxy_password";
var client = BrightDataProxyConfigurator.ConfigureHttpClient(host, username, password);
// Scrape content from the target URL
string urlToScrape = "https://www.wikipedia.org/";
await WebContentScraper.ScrapeContent(urlToScrape, client);
}
}
}
Hinweis: Stellen Sie sicher, dass Sie die Bright Data-Proxy-Anmeldedaten durch die zuvor gespeicherten ersetzen.
Öffnen Sie als Nächstes zum Testen und Ausführen Ihrer Anwendung Ihre Shell oder Ihr Terminal aus dem Stammverzeichnis Ihres WebScrapBrightData
-Projekts und führen Sie den folgenden Befehl aus:
dotnet build
dotnet run
Sie sollten die gleiche Ausgabe erhalten wie zuvor, als Sie öffentliche Proxys verwendet haben:
…output omitted…
Title: Latina, Link: https://la.wikipedia.org/
Title: Latviešu, Link: https://lv.wikipedia.org/
Title: Lietuvių, Link: https://lt.wikipedia.org/
Title: Magyar, Link: https://hu.wikipedia.org/
Title: Македонски, Link: https://mk.wikipedia.org/
Title: Bahasa Melayu, Link: https://ms.wikipedia.org/
Title: Bahaso Minangkabau, Link: https://min.wikipedia.org/
Title: bokmål, Link: https://no.wikipedia.org/
Title: nynorsk, Link: https://nn.wikipedia.org/
Title: Oʻzbekcha / Ўзбекча, Link: https://uz.wikipedia.org/
Title: Қазақша / Qazaqşa / قازاقشا, Link: https://kk.wikipedia.org/
Title: Română, Link: https://ro.wikipedia.org/
Title: Simple English, Link: https://simple.wikipedia.org/
Title: Slovenčina, Link: https://sk.wikipedia.org/
Title: Slovenščina, Link: https://sl.wikipedia.org/
Title: Српски / Srpski, Link: https://sr.wikipedia.org/
Title: Srpskohrvatski / Српскохрватски, Link: https://sh.wikipedia.org/
Title: Suomi, Link: https://fi.wikipedia.org/
Title: தமிழ், Link: https://ta.wikipedia.org/
…output omitted…
Das Programm verwendet den Bright Data-Proxy, um die Wikipedia-Startseite zu scrapen und die extrahierten Titel und Links in der Konsole anzuzeigen. Dies zeigt, wie effektiv und einfach die Integration des Bright Data-Proxys in ein C#-Web-Scraping-Projekt für eine diskrete und robuste Datenextraktion ist.
Wenn Sie die Auswirkungen der Verwendung eines Bright Data-Proxys visualisieren möchten, können Sie versuchen, eine GET-Anfrage an http://lumtest.com/myip.json zu senden. Diese Website gibt den Standort und andere netzwerkbezogene Details des Clients zurück, der gerade versucht, auf die Website zuzugreifen. Wenn Sie dies selbst ausprobieren möchten, öffnen Sie den Link in einer neuen Browser-Registerkarte. Sie sollten die Details Ihres Netzwerks sehen, die öffentlich sichtbar sind.
Um es mit einem Bright Data-Proxy zu versuchen, aktualisieren Sie den Code in WebContentScraper.cs
so, dass er dem Folgenden entspricht:
using HtmlAgilityPack;
public class WebContentScraper
{
public static async Task ScrapeContent(string url, HttpClient client)
{
var response = await client.GetAsync(url);
var content = await response.Content.ReadAsStringAsync();
HtmlDocument doc = new();
doc.LoadHtml(content);
Console.Write(content);
}
}
Aktualisieren Sie dann die Variable urlToScrape
in der Datei Program.cs
, um die Website zu scrapen:
string urlToScrape = "http://lumtest.com/myip.json";
Versuchen Sie nun erneut, die App auszuführen. Sie sollten eine Ausgabe wie diese in Ihrem Terminal sehen:
{"ip":"79.221.123.68","country":"DE","asn":{"asnum":3320,"org_name":"Deutsche Telekom AG"},"geo":{"city":"Koenigs Wusterhausen","region":"BB","region_name":"Brandenburg","postal_code":"15711","latitude":52.3014,"longitude":13.633,"tz":"Europe/Berlin","lum_city":"koenigswusterhausen","lum_region":"bb"}}
Dies bestätigt, dass die Anfrage tatsächlich über die Bright Data-Proxy-Server weitergeleitet wird.
Fazit
In diesem Artikel haben Sie gelernt, wie Sie Proxy-Server mit C# für Web Scraping verwenden.
Obwohl lokale Proxy-Server in einigen Szenarien nützlich sein können, stellen sie häufig Einschränkungen für Web-Scraping-Projekte dar. Zum Glück können Proxy-Server helfen. Mit seinem ausgedehnten globalen Netzwerk und einer Vielzahl von Proxy-Optionen, darunter Privatanwender-, IDA-, Rechenzentrums– und mobile Proxys, garantiert Bright Data ein hohes Maß an Flexibilität und Zuverlässigkeit. Insbesondere die Proxy-Rotationsfunktion ist für umfangreiche Scraping-Aufgaben von unschätzbarem Wert. Sie trägt dazu bei, die Anonymität zu wahren und das Risiko von IP-Sperren zu verringern.
Wenn Sie Ihre Web-Scraping-Reise fortsetzen, sollten Sie die Lösungen von Bright Data als eine leistungsstarke und skalierbare Möglichkeit zur effizienten Datenerfassung unter Einhaltung der Best Practices für Web Scraping in Betracht ziehen.
Der gesamte Code für dieses Tutorial ist in diesem GitHub-Repository verfügbar.
Keine Kreditkarte erforderlich