Startseite BlogWeb-Scraping Web-Scraping mit C#, ohne blockiert zu werden

Web-Scraping mit C#, ohne blockiert zu werden

von Kadek

C# ist eine Allzweck-Programmiersprache, die hauptsächlich in Unternehmensprojekten und -anwendungen eingesetzt wird. Sie hat ihre Wurzeln in der C-Familie und ist damit eine äußerst effiziente Sprache, die Sie in Ihrem Werkzeuggürtel haben sollten.

Aufgrund seiner Beliebtheit verfügt C# über eine Vielzahl von Tools, mit denen Entwickler elegante Lösungen implementieren können, und Web Scraping ist dabei keine Ausnahme.

In diesem Tutorial erstellen wir einen einfachen Web Scraper mit C# und seinen benutzerfreundlichen Scraping-Bibliotheken. Außerdem zeigen wir Ihnen, wie Sie mit einer einfachen Codezeile verhindern können, dass Ihr Bot blockiert wird.

Es gibt jedoch ein paar Dinge, die wir beachten müssen, bevor wir mit dem Schreiben unseres Codes beginnen.

Warum sollten Sie C# anstelle von C für Web Scraping verwenden?

C ist eine weit verbreitete Mid-Level-Programmiersprache, mit der sich Betriebssysteme und Programmanwendungen erstellen lassen. Die Verwendung von C für Web Scraping kann jedoch sowohl teuer als auch ineffizient sein.

Um einen C-Web Scraper zu entwickeln, müssten wir viele Komponenten von Grund auf neu erstellen oder lange, komplizierte Codedateien schreiben, um einfache Funktionen auszuführen.

Bei der Auswahl einer Sprache für die Erstellung unseres Web Scrapers sind wir auf Einfachheit und Skalierbarkeit bedacht. Es macht doch keinen Sinn, sich auf ein Tool festzulegen, das uns die Arbeit erschwert, oder?

Stattdessen können wir C# und .NET Core verwenden, um mit Tools wie ScrapySharp und HtmlAgilityPack in einem Bruchteil der Zeit einen funktionalen Web Scraper zu erstellen.

Diese Frameworks machen das Senden von HTTP-Anfragen und das Parsen des DOM einfach und sauber, und wir werden einem sauberen Code dankbar sein, wenn es an der Zeit ist, unseren Scraper zu pflegen.

HTML- und CSS-Grundlagen für Web Scraping in C#

Bevor wir irgendeinen Code schreiben können, müssen wir zunächst die Website verstehen, von der wir Daten abrufen möchten. Dabei sollten wir besonders auf die HTML-Struktur und die CSS-Selektoren achten.

Lassen Sie uns einen kurzen Überblick über diese Struktur geben - wenn Sie bereits mit HTML und CSS vertraut sind, können Sie zum nächsten Abschnitt übergehen.

HTML-Tags

Hypertext Markup Language (HTML) ist der Grundbaustein des Webs. Jede Website verwendet HTML, um dem Browser mitzuteilen, wie der Inhalt wiedergegeben werden soll, indem jedes Element in Tags verpackt wird.

<h1>Dies teilt dem Browser mit, dass dies die wichtigste Überschrift auf der Seite ist.</h1>

Die häufigsten Tags, die wir abfragen, sind:

  • H1 bis 6 - definiert Überschriften in einer absteigenden Hierarchie. Normalerweise nutzen wir diese Elemente, um Produktnamen, Inhaltstitel und Schlagzeilen zu erhalten.
  • div - gibt einen Abschnitt einer Seite an und wird verwendet, um den Inhalt zu organisieren. In manchen Fällen möchten wir einen bestimmten <div> um unserem Scraper mitzuteilen, wo er nach einem Element suchen soll.
  • p - definiert ein Element wie einen Absatz. Zwischen diesen Tags finden wir normalerweise Beschreibungen, Angebotsdetails und sogar Preise.
  • a - teilt dem Browser mit, dass das Element ein Link zu einer anderen Seite (intern oder extern) ist. In einigen Fällen werden Titel in <a> Tags, so dass wir den Text aus dem Link extrahieren müssen, um auf sie zuzugreifen. Außerdem können wir das href-Attribut verwenden, um die URL zu erhalten. Dies ist besonders wichtig, um die Datenquelle zu speichern oder Paginierungen zu verfolgen.

Um einen Blick auf die HTML-Struktur einer Website zu werfen, drücken Sie Strg/Befehl + Umschalt + C (oder klicken Sie mit der rechten Maustaste auf die Seite, die Sie scrapen möchten, und wählen Sie inspect).

HTML-Tags
Bild aus ScraperAPI Rvest Tutorial

Wir befinden uns jetzt im Inspektor oder in den Entwicklertools des Browsers. Dies wird uns helfen, den Quellcode jedes Elements zu finden und zu verstehen, wie wir unseren Scraper dazu bringen können, es zu finden.

Nehmen wir an, wir möchten den Titel dieses Artikels sehen. Klicken Sie im Inspektorwerkzeug auf den Titel und die Konsole springt zu diesem Element.

Web Scraping in R

Es scheint, als sei der Titel um eine <span> Tag innerhalb eines <h1>.

Natürlich ist jede Website anders aufgebaut. Daher ist es sehr wichtig, dass Sie etwas Zeit damit verbringen, die Logik einer Website zu verstehen, um spätere Engpässe zu vermeiden.

Es kommt häufig vor, dass die Seiten die gleichen HTML-Tags für verschiedene Elemente verwenden. Wenn wir nur auf das Tag abzielen, werden wir viele unnötige Informationen auslesen (und damit Zeit und Ressourcen verschwenden).

Wie sagen wir also unserem Scraper, welches Element er finden und zurückgeben soll?

CSS- und XPath-Selektoren

Wenn wir uns die Elemente ansehen, können wir feststellen, dass jede Komponente eine Klasse oder eine ID hat.

CSS- und XPath-Selektoren

Diese Attribute werden verwendet, um gemeinsame Tags voneinander zu unterscheiden, die später mit Cascading Style Sheets (CSS) Selektoren und gestalten sie.

CSS- und XPath-Selektoren

In dem obigen Beispiel steht der Punkt (.) für 'Klasse'.

Mit anderen Worten, wir wählen alle Elemente mit class="blog-detail-img-top" aus und wenden das Styling darunter an.

Wir können dieselbe Logik verwenden, um mit unserem Scraper Elemente aus der Seite auszuwählen, indem wir das Element + Klasse ('a.className') oder Element + ID ('a#idName') definieren

Eine Alternative zu CSS-Selektoren ist die Verwendung des XPath des Elements.

XML Pfad (XPath) verwendet xpath-Ausdrücke, um Knoten aus einem XML- oder HTML-Dokument auszuwählen. Anstatt also eine Klasse oder ID auszuwählen, würden wir einen Pfad zu dem Element selbst erstellen.

Hier ist eine hilfreiche Vergleichstabelle aus dem Git Repo von Slotix:

Ziel CSS 3 XPath
Alle Elemente * //*
Alle P-Elemente p //p
Alle Kinderelemente p>* //p/*
Element nach ID #foo //*[@id='foo']
Element nach Klasse .foo //*[enthält(@class,'foo')]
Element mit Attribut *Web Scraping mit C# ohne blockiert zu werden //*[@Titel]
Das erste Kind von allen P p>*:first-child //p/*[0]
Alle P mit einem A-Kind Nicht möglich //p[a]
Nächstes Element p + * //p/following-sibling::*[0]
Vorheriges Element Nicht möglich //p/preceding-sibling::*[0]

Es gibt Szenarien, in denen uns CSS-Selektoren nicht weiterhelfen. Dann kann es nützlich sein, zu wissen, wie man xpath-Ausdrücke schreibt.

Das Schöne daran ist, dass wir beide ohne Probleme in unserem Projekt kombinieren können.

CSS-Selektoren sind einfach zu implementieren, daher wäre dies in den meisten Fällen der beste Weg. Aber in den Momenten, in denen wir spezifischer sein müssen oder in denen es keine Klassen oder IDs gibt, auf die wir uns verlassen können, ermöglicht uns die Implementierung eines XPath-Ausdrucks, die Elemente zu erfassen.

Ein hervorragendes Beispiel dafür ist die Verwendung von XPath, um Elemente zu finden, die einen bestimmten Text enthalten - was mit CSS unmöglich wäre.

Da die Grundlagen nun geklärt sind, können wir mit der Erstellung unseres C# Web Scraper beginnen.

So scrapen Sie eine statische Seite mit C#

Es gibt vier Hauptkomponenten oder Schritte, um Webinhalte zu scrapen:

  • Senden Sie eine HTTP-Anfrage an den Server, um den HTML-Quellcode herunterzuladen.
  • Parsen Sie das DOM
  • Wählen Sie die Elemente, die wir scrapen möchten
  • Speichern Sie sie in einer Datenbank (CSV, JSON, usw.)

Wir werden den Blog zur Kundenbindung von Hubspot durchforsten und die Titel der einzelnen Artikel für unser Beispiel sammeln.

Mit diesem Verfahren können Sie eine Datenbank mit den Inhalten Ihrer Konkurrenten schneller erstellen, als es von Hand möglich wäre.

1. Einrichten unserer Entwicklungsumgebung

Um unseren C# Scraper zu erstellen, müssen wir einige Dinge installieren, angefangen bei .NET Core und Visual Studio Code.

Installieren von .NET Core

.NET Core ist ein von Microsoft gepflegtes, plattformübergreifendes Open-Source-Framework für allgemeine Zwecke, das C# verwendet (Sie können aber auch F# verwenden), um verschiedene Programme und Anwendungen zu erstellen.

Um es zu installieren, gehen Sie auf die .NET-Website und wählen Sie je nach Rechner die gewünschte Option. In unserem Fall werden wir die empfohlene Version für Mac verwenden.

Installieren von .NET Core

Nachdem das SDK heruntergeladen wurde, folgen wir einfach dem Installationsassistenten.

Installieren von .NET Core

Wie wir in der Abbildung oben sehen können, enthält dieses SDK die .NET Core- und ASP.NET-Laufzeiten. Wenn Sie sich also weiter mit C# beschäftigen möchten, sind Sie für die Zukunft bestens gerüstet.

Installieren und Einrichten von Visual Studio Code

Die Installation von VS Code ist so einfach wie der Besuch der Website und das Herunterladen der mit Ihrem Betriebssystem kompatiblen Version.

Installieren und Einrichten von Visual Studio Code

Sobald die Installation abgeschlossen ist, starten Sie die IDE und installieren Sie die C#-Erweiterung.

Installieren und Einrichten von Visual Studio Code

Und jetzt können wir mit unserem Projekt beginnen.

Erstellen eines neuen C#-Projekts und Konfigurieren unseres Debuggers

Wir erstellen einen neuen Ordner mit dem Namen 'csharp_scraper_tutorial', öffnen ihn in VS Code und starten dann ein neues Terminal.

Installieren und Einrichten von Visual Studio Code

Im Terminal geben wir den Befehl dotnet new console ein, um alle notwendigen Dateien zu erstellen, die wir für die Ausführung unseres Scrapers benötigen, einschließlich der Datei 'Program.cs', in die wir unseren Code schreiben.

Installieren und Einrichten von Visual Studio Code

Da wir die C#-Erweiterung bereits installiert haben, können wir auf den Debugger klicken und feststellen, dass .NET Core Launch ausgewählt ist - falls nicht, klicken Sie einfach auf das Dropdown-Menü und klicken Sie darauf.

Installieren und Einrichten von Visual Studio Code

Anmerkung: Dies wird für die Fehlersuche und den Betrieb unseres Scrapers benötigt. Stellen Sie also sicher, dass Sie die richtige Option ausgewählt haben.

Standardmäßig ist die Konsoleneigenschaft auf internalConsole eingestellt, aber wir müssen dies ändern, wenn wir die Eingabe erfassen wollen.

Klicken Sie dazu auf Einstellungen, um die Datei launch.json zu öffnen.

Installieren und Einrichten von Visual Studio Code

In der Datei finden wir die Eigenschaft console etwa in der Mitte und ändern die aktuelle Einstellung in externalTerminal.

Installieren und Einrichten von Visual Studio Code

Um zu überprüfen, ob es funktioniert, starten Sie den Debugger. Wenn es funktioniert, wird das Programm 'Hello World' in Ihrem externen Terminal ausgeben.

Installieren und Einrichten von Visual Studio Code

Hinzufügen von ScrapySharp und CsvHelper zu unserem Projekt

Wir könnten auf jeden Fall C# allein verwenden, um eine HTTP-Anfrage zu senden und die Antwort zu analysieren, um die Informationen zu extrahieren, an denen wir interessiert sind.

Das wäre jedoch eine Verschwendung von Zeit und Verstand ohne guten Grund.

Denken Sie daran, dass wir uns für C# entschieden haben, weil es bereits über Tools verfügt, die uns die Arbeit erleichtern. Das erhöht die Effizienz und senkt die Kosten für unser Projekt.

ScrapySharp ist eine Open-Source-Bibliothek für Web Scraping, die für c# entwickelt wurde. Sie enthält auch einen Web-Client, der das Verhalten eines Browsers simuliert (perfekt für das Scraping dynamischer Seiten oder ereignisgesteuerter Inhalte) und eine HTMLAgilityPack-Erweiterung (für die Auswahl von Elementen mit CSS-Selektoren).

Anmerkung: In diesem Tutorial werden wir der Einfachheit halber hauptsächlich das HTMLAgilityPack verwenden, aber wir empfehlen dennoch die Installation von ScrapySharp, da wir es in komplexeren Projekten häufig verwenden werden. Im Rahmen dieses Tutorials werden wir eine Komponente von ScrapySharp (ScrapySharp.Extensions) verwenden.

Das Hinzufügen dieser Bibliothek zu unserem Projekt ist so einfach wie die Eingabe des Befehls dotnet add package ScrapySharp, um das Nuget-Paket zu importieren.

Um die Einrichtung unserer C#-Entwicklungsumgebung abzuschließen, geben Sie in Ihrem Terminal dotnet add package csvhelper ein und fügen die Abhängigkeiten zu unserer Datei 'Program.cs' hinzu.

</p>
using CsvHelper;
using HtmlAgilityPack;
using ScrapySharp.Extensions;
using System.IO;
using System.Collections.Generic;
using System.Globalization;
<p>

2. Senden Sie eine HTTP-Anfrage an den Server

Jetzt, da alle unsere Abhängigkeiten einsatzbereit sind, können wir eine Anfrage an unseren Zielserver senden, um den HTML-Code der Seite zurückzugeben.

Ersetzen Sie innerhalb unserer Hauptmethode die Methode Console.WriteLine() durch den folgenden Code:

</p>
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("https://blog.hubspot.com/topic-learning-path/customer-retention");
<p>

Außerhalb der Hauptmethode werden wir eine neue öffentliche Klasse erstellen:

</p>
public class Row
{
	public string Title {get; set;}
}
<p>

Was die Verwendung von Scraping-Frameworks so elegant macht, ist die Tatsache, dass fast jeder durch das Lesen des Codes verstehen kann, was wir unserem Scraper sagen wollen. Das ist die Effizienz und Einfachheit, die wir anstreben.

3. Auswählen von Elementen mit CSS-Selektoren

Unser Csharp Scraper hat das HTML-DOM der Seite heruntergeladen. Allerdings wird er eine lange HTML-Zeichenkette zurückgeben, die für uns nicht viel wert ist.

Um unserem Scraper mitzuteilen, wonach er suchen soll, müssen wir es zunächst selbst wissen.

Zunächst öffnen wir die Ziel-Website im Browser und untersuchen die Seite, um herauszufinden, wie die Titel im HTML-Code angezeigt werden.

Senden Sie eine HTTP-Anfrage an den Server

Nachdem wir einen der Titel untersucht haben, können wir sehen, dass der Text innerhalb von <a> Tags ohne Klasse. Das ist kein guter Anfang, da wir sie nicht direkt anvisieren können. Was können wir also tun?

Beachten Sie, dass <a> Tags selbst sind in <h3> Tags mit der Klasse "blog-card__content-title". Das ist unser Ziel!

var Headers = doc.DocumentNode.CssSelect("h3.blog-card__content-title > a");

Anmerkung: Durch den Import von ScrapySharp.Extensions in unser Projekt sind wir in der Lage, Css.Select aufzurufen. Unter Umständen wird VS Code Sie darauf hinweisen, dass HtmlNode keine Definition dafür hat.

Wir bauen den CSS-Selektor auf, indem wir ein Tag-Element (h3) mit seiner Klasse (blog-card__content-title) mit einem Punkt kombinieren. Dann weist das Symbol &gt; unseren Scraper an, nach dem Element <a> innerhalb dieses Elements. Das Ergebnis wird in einer Variablen namens Headers gespeichert.

Natürlich können wir sie benennen, wie wir wollen, solange sie beschreibend sind. Wenn wir anfangen, abstrakte Namen für Variablen zu verwenden, kann das schnell zu einem Albtraum werden.

4. Speichern des Textes eines Links in einer CSV-Datei

Mithilfe von CsvHelper extrahieren wir nun den Text innerhalb des Link-Elements (der der Titel jedes Artikels ist) und erstellen eine neue CSV-Datei, um unsere Daten zu speichern.

Zu diesem Zweck müssen wir eine neue Variable erstellen:

</p>
var titles = new Liste<row>();
<p>

Und darin iterieren Sie durch jedes Element, das unser Scraper findet, um alle Titel innerhalb der Seite zu extrahieren.

</p>
foreach (var item in Kopfzeilen)
	{
		titles.Add(new Row { Title = item.InnerText});
	}
<p>

Sobald wir den Text haben, müssen wir unsere Datei erstellen und die Informationen aus der Hauptvariablen (Titel) in sie schreiben.

</p>
using (var writer = new StreamWriter("hubspot.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
	csv.WriteRecords(titles);
}
<p>

5. Unser Skript ausführen

Wenn Sie mitgemacht haben, sollte der endgültige Code in etwa so aussehen:

</p>
//Abhängigkeiten des Projekts
using CsvHelper;
using HtmlAgilityPack;
using ScrapySharp.Extensions;
using System.IO;
using System.Collections.Generic;
using System.Globalization;
namespace csharp_scraper_tutorial
{
	Klasse Programm
	{
		static void Main(string[] args)
		{
			//Senden Sie die Anfrage an den Server

			HtmlWeb web = new HtmlWeb();

			HtmlDocument doc = web.Load("https://blog.hubspot.com/topic-learning-path/customer-retention");

			//Wählen Sie einen bestimmten Knoten aus dem HTML-Dokument aus

			var Headers = doc.DocumentNode.CssSelect("h3.blog-card__content-title &gt; a");

			//Extrahieren Sie den Text und speichern Sie ihn in einer CSV-Datei

			var Titel = new Liste<row>();

			foreach (var item in Kopfzeilen)
				{
					titles.Add(new Row { Title = item.InnerText});
				}
			using (var writer = new StreamWriter("hubspot.csv"))
			using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
			{
				csv.WriteRecords(titles);
			}
			}
			public class Row
			{
			public string Title {get; set;}
		}
	}
}


<p>

Um zu testen, ob es funktioniert, geben Sie dotnet run in das Terminal ein oder verwenden Sie den Debugger.

Wenn es funktioniert, wird eine neue CSV-Datei im Verzeichnis Ihres Projekts oder in dem Pfad, den Sie in StreamWriter() angegeben haben, angezeigt.

Unser Skript ausführen

Unser Skript ausführen

Fantastisch, alle Kacheln befinden sich im Dokument. Herzlichen Glückwunsch zur Erstellung Ihres ersten Web Scrapers in C#!

Verwendung von ScraperAPI mit C# für Skalierbarkeit mit einer einzigen Zeile Code

Wenn wir die richtigen Tools verwenden, kann Web Scraping eine einfache Aufgabe sein. Nicht einfach, aber einfach.

Es geht darum, die richtige Logik hinter der Struktur einer Website zu finden und Ihr Skript so zu gestalten, dass es diese Logik nutzt, um Daten zu finden und zu extrahieren.

Es gibt jedoch noch viele andere Herausforderungen, denen wir uns stellen müssen, wenn wir versuchen, große Datenmengen zu scrapen.

Hier sehen Sie, wie wir die meisten dieser Probleme lösen können, indem wir eine einfache Codezeile in unseren Scraper einfügen.

CAPTCHAs handhaben und Ihre IP automatisch rotieren lassen

Da Daten immer wertvoller werden, sind die Techniken zum Schutz vor Scraping im Laufe der Zeit immer ausgefeilter geworden.

Ein Server kann zum Beispiel die Häufigkeit der Anfragen von jeder IP überwachen. Wenn die IP zu viele Anfragen innerhalb eines bestimmten Zeitrahmens sendet, blockiert der Server automatisch alle folgenden Anfragen.

Diese Sperre kann je nach den Regeln der Website ein paar Stunden aufwärts oder für immer gehen.

Eine weitere Technik, die immer häufiger eingesetzt wird, ist die Implementierung von CAPTCHAs. Diese rätselhaften Tests sind dazu gedacht, zwischen Menschen und Robotern zu unterscheiden.

Unser aktuelles Skript wird in seiner jetzigen Form keine dieser Hürden nehmen.

Wir können unsere Anfrage jedoch über ScraperAPI-Server senden, die beides automatisch erledigen.

Um die API nutzen zu können, müssen wir zunächst ein kostenloses ScraperAPI-Konto einrichten - es beinhaltet 5000 kostenlose API-Credits.

Sobald wir in unserem Dashboard sind, haben wir Zugriff auf unseren API-Schlüssel und ein paar Codebeispiele.

API-Schlüssel

Um die Anfrage zu implementieren, konstruieren wir die URL unserer Anfrage wie folgt:

HtmlDocument doc = web.Load("http://api.scraperapi.com?api_key=51e43be283e4db2a5afb6266xxxxxxxx&url=https://blog.hubspot.com/topic-learning-path/customer-retention");

Die ScraperAPI wählt dann für jede Anfrage den besten Proxy und die beste Kopfzeile aus und wechselt die IP zwischen den einzelnen Anfragen. Sie vermeidet auch alle CAPTCHAs, auf die sie stößt, indem sie die Anfrage mit einer anderen Kombination erneut versucht.

Dies ist dank unseres Algorithmus für maschinelles Lernen, jahrelanger statistischer Daten und unserer riesigen Browserfarmen möglich.

Anmerkung: Nur 200 erfolgreiche Anfragen werden auf Ihr verfügbares API-Guthaben angerechnet. Wenn eine Anfrage fehlschlägt, versucht ScraperAPI es etwa 60 Sekunden lang erneut, bis ein Statuscode 400 zurückgegeben wird.

Diese Funktion ist entscheidend für große Scraping-Projekte, bei denen Daten von Hunderten von Seiten extrahiert werden müssen, um Sperren zu vermeiden und gleichzeitige Anfragen zu senden, um Zeit zu sparen.

Ausführen von JavaScript für den Zugriff auf dynamische Seiten

JavaScript-lastige Websites sind über eine normale HTTP-Anfrage nicht zugänglich.

Das liegt daran, dass unser Scraper keine Möglichkeit hat, das JS-Skript auszuführen. Die Antwort wird also höchstwahrscheinlich ein leeres oder teilweise heruntergeladenes HTML-Dokument sein.

Eine etwas komplizierte Möglichkeit, dieses Problem zu lösen, ist die Verwendung eines Headless Browsers wie PuppeteerSharp, um das Verhalten eines Webbrowsers zu simulieren. Allerdings müssten dafür mehr als nur ein paar Zeilen Code in unserem Skript geändert werden, was vielleicht sogar zu viel des Guten wäre.

Sofern Sie nicht auf Schaltflächen klicken oder ein Formular abschicken müssen, können Sie einfach den Render-Parameter von ScraperAPI verwenden, um JavaScript auszuführen.

Dazu fügen wir render=true am Ende unserer URL hinzu.

"http://api.scraperapi.com?api_key=51e43be283e4db2a5afb6266xxxxxxxx&url=https://blog.hubspot.com/topic-learning-path/customer-retention&render=true"

Zugriff auf geosensitive Daten

Einige Websites wie Amazon und Google zeigen unterschiedliche Ergebnisse an, abhängig von der Geolokalisierung der IP-Adresse, von der wir die Anfrage senden.

Wenn wir jedoch neue Märkte erschließen wollen, haben wir einen anderen Datenbedarf als an unserem derzeitigen Standort.

Wir können die ScraperAPI verwenden und sie anweisen, die HTTP-Anfrage mit einem bestimmten Ländercode zu senden. So erhalten wir Zugang zu den Daten, wie sie unser potenzieller neuer Markt sehen wird.

Genau wie zuvor fügen wir nun einen neuen Parameter zu unserer URL hinzu:

"http://api.scraperapi.com?api_key=51e43be283e4db2a5afb6266xxxxxxxx&url=https://blog.hubspot.com/topic-learning-path/customer-retention&render=true&country_code=cn"

Der Parameter country_code=cn weist unsere ScraperAPI an, die Antwort so zurückzugeben, als befänden wir uns in China.

Eine vollständige Liste der verfügbaren Ländercodes und weitere Funktionalitäten finden Sie in unserer Dokumentation und in unserem ScraperAPI Cheat Sheet.

Wir hoffen, dass Ihnen unser C#-Scraping-Tutorial gefallen hat und Sie dabei ein paar Dinge gelernt haben.

In zukünftigen Artikeln werden wir tiefer in ScrapySharp und PuppeteerSharp eintauchen, damit Sie C# für größere, komplexere Projekte verwenden können.

Bis zum nächsten Mal, viel Spaß beim Scraping!

Verwandte Beiträge

Einen Kommentar hinterlassen