Erweiterte Webscraping-Funktionen

Chaknith Bin
Chaknith Bin
25. Januar 2023
Aktualisiert 10. Dezember 2024
Teilen Sie:
This article was translated from English: Does it need improvement?
Translated
View the article in English

HttpIdentity-Merkmal

Bei einigen Website-Systemen muss der Nutzer angemeldet sein, um den Inhalt zu sehen; in diesem Fall können wir eine HttpIdentity verwenden: -

HttpIdentity id = new HttpIdentity();
id.NetworkUsername = "username";
id.NetworkPassword = "pwd";
Identities.Add(id); 
HttpIdentity id = new HttpIdentity();
id.NetworkUsername = "username";
id.NetworkPassword = "pwd";
Identities.Add(id); 
Dim id As New HttpIdentity()
id.NetworkUsername = "username"
id.NetworkPassword = "pwd"
Identities.Add(id)
$vbLabelText   $csharpLabel

Eines der beeindruckendsten und leistungsstärksten Merkmale von IronWebScraper ist die Fähigkeit, Tausende von einzigartigen (Benutzerdaten und/oder Browser-Engines) zu verwenden, um Websites mithilfe von Multi-Login-Sitzungen zu täuschen oder auszulesen.

public override void Init()
{
    License.LicenseKey = " LicenseKey ";
    this.LoggingLevel = WebScraper.LogLevel.All;
    this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
    var proxies = "IP-Proxy1: 8080,IP-Proxy2: 8081".Split(',');
    foreach (var UA in IronWebScraper.CommonUserAgents.ChromeDesktopUserAgents)
    {
        foreach (var proxy in proxies)
        {
            Identities.Add(new HttpIdentity()
            {
                UserAgent = UA,
                UseCookies = true,
                Proxy = proxy
            });
        }
    }
    this.Request("http://www.Website.com", Parse);
}
public override void Init()
{
    License.LicenseKey = " LicenseKey ";
    this.LoggingLevel = WebScraper.LogLevel.All;
    this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
    var proxies = "IP-Proxy1: 8080,IP-Proxy2: 8081".Split(',');
    foreach (var UA in IronWebScraper.CommonUserAgents.ChromeDesktopUserAgents)
    {
        foreach (var proxy in proxies)
        {
            Identities.Add(new HttpIdentity()
            {
                UserAgent = UA,
                UseCookies = true,
                Proxy = proxy
            });
        }
    }
    this.Request("http://www.Website.com", Parse);
}
Public Overrides Sub Init()
	License.LicenseKey = " LicenseKey "
	Me.LoggingLevel = WebScraper.LogLevel.All
	Me.WorkingDirectory = AppSetting.GetAppRoot() & "\ShoppingSiteSample\Output\"
	Dim proxies = "IP-Proxy1: 8080,IP-Proxy2: 8081".Split(","c)
	For Each UA In IronWebScraper.CommonUserAgents.ChromeDesktopUserAgents
		For Each proxy In proxies
			Identities.Add(New HttpIdentity() With {
				.UserAgent = UA,
				.UseCookies = True,
				.Proxy = proxy
			})
		Next proxy
	Next UA
	Me.Request("http://www.Website.com", Parse)
End Sub
$vbLabelText   $csharpLabel

Sie haben mehrere Eigenschaften, die Ihnen verschiedene Verhaltensweisen ermöglichen und so verhindern, dass Websites Sie blockieren.

Einige dieser Eigenschaften: -

  • NetworkDomain: Die Netzwerkdomäne, die für die Benutzerauthentifizierung verwendet werden soll. Unterstützt Windows, NTLM, Keroberos, Linux, BSD und Mac OS X Netzwerke. Muss mit (NetworkUsername und NetworkPassword) verwendet werden
  • NetzwerkBenutzername: Der Netzwerk/HTTP-Benutzername, der zur Benutzerauthentifizierung verwendet wird. Unterstützt Http, Windows-Netzwerke, NTLM, Kerberos, Linux-Netzwerke, BSD-Netzwerke und Mac OS.
  • NetworkPassword : Das Netzwerk/HTTP-Passwort, das zur Benutzerauthentifizierung verwendet werden soll. Unterstützt Http , Windows-Netzwerke, NTLM , Keroberos , Linux-Netzwerke, BSD-Netzwerke und Mac OS.
  • Proxy: Proxy-Einstellungen festlegen
  • UserAgent : zum Festlegen der Browser-Engine (Chrome Desktop, Chrome Mobile, Chrome Tablet, IE und Firefox, etc.)
  • HttpRequestHeaders: für benutzerdefinierte Header-Werte, die mit dieser Identität verwendet werden sollen, und es akzeptiert ein Wörterbuchobjekt (Dictionary <string, string>)
  • UseCookies : die Verwendung von Cookies aktivieren/deaktivieren

    IronWebscraper führt den Scraper mit Zufallsidentitäten aus. Wenn wir die Verwendung einer bestimmten Identität zum Parsen einer Seite angeben müssen, können wir dies tun.

public override void Init()
{
    License.LicenseKey = " LicenseKey ";
    this.LoggingLevel = WebScraper.LogLevel.All;
    this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
    HttpIdentity identity = new HttpIdentity();
    identity.NetworkUsername = "username";
    identity.NetworkPassword = "pwd";
    Identities.Add(id);
    this.Request("http://www.Website.com", Parse, identity);
}
public override void Init()
{
    License.LicenseKey = " LicenseKey ";
    this.LoggingLevel = WebScraper.LogLevel.All;
    this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
    HttpIdentity identity = new HttpIdentity();
    identity.NetworkUsername = "username";
    identity.NetworkPassword = "pwd";
    Identities.Add(id);
    this.Request("http://www.Website.com", Parse, identity);
}
Public Overrides Sub Init()
	License.LicenseKey = " LicenseKey "
	Me.LoggingLevel = WebScraper.LogLevel.All
	Me.WorkingDirectory = AppSetting.GetAppRoot() & "\ShoppingSiteSample\Output\"
	Dim identity As New HttpIdentity()
	identity.NetworkUsername = "username"
	identity.NetworkPassword = "pwd"
	Identities.Add(id)
	Me.Request("http://www.Website.com", Parse, identity)
End Sub
$vbLabelText   $csharpLabel

Aktivieren Sie die Web-Cache-Funktion

Diese Funktion dient dazu, angeforderte Seiten zwischenzuspeichern. Sie wird häufig in der Entwicklungs- und Testphase eingesetzt; die es Entwicklern ermöglicht, benötigte Seiten zwischenzuspeichern und nach einer Codeaktualisierung wiederzuverwenden. Dies ermöglicht es Ihnen, Ihren Code auf zwischengespeicherten Seiten auszuführen, nachdem Sie Ihren Web Scraper neu gestartet haben, ohne sich jedes Mal mit der Live-Website verbinden zu müssen (Action-Replay).

Sie können es in der Init()-Methode verwenden

EnableWebCache();

OR

EnableWebCache(Timespan Expiry);

Es speichert Ihre zwischengespeicherten Daten im WebCache-Ordner unter dem Ordner des Arbeitsverzeichnisses

public override void Init()
{
    License.LicenseKey = " LicenseKey ";
    this.LoggingLevel = WebScraper.LogLevel.All;
    this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
    EnableWebCache(new TimeSpan(1,30,30));
    this.Request("http://www.WebSite.com", Parse);
}
public override void Init()
{
    License.LicenseKey = " LicenseKey ";
    this.LoggingLevel = WebScraper.LogLevel.All;
    this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
    EnableWebCache(new TimeSpan(1,30,30));
    this.Request("http://www.WebSite.com", Parse);
}
Public Overrides Sub Init()
	License.LicenseKey = " LicenseKey "
	Me.LoggingLevel = WebScraper.LogLevel.All
	Me.WorkingDirectory = AppSetting.GetAppRoot() & "\ShoppingSiteSample\Output\"
	EnableWebCache(New TimeSpan(1,30,30))
	Me.Request("http://www.WebSite.com", Parse)
End Sub
$vbLabelText   $csharpLabel

IronWebScraper verfügt außerdem über Funktionen, die es Ihrer Engine ermöglichen, nach dem Neustart des Codes das Scraping fortzusetzen, indem Sie den Prozessnamen des Startvorgangs der Engine mit Start(CrawlID) festlegen.

static void Main(string [] args)
{
    // Create Object From Scraper class
    EngineScraper scrape = new EngineScraper();
    // Start Scraping
    scrape.Start("enginestate");
}
static void Main(string [] args)
{
    // Create Object From Scraper class
    EngineScraper scrape = new EngineScraper();
    // Start Scraping
    scrape.Start("enginestate");
}
Shared Sub Main(ByVal args() As String)
	' Create Object From Scraper class
	Dim scrape As New EngineScraper()
	' Start Scraping
	scrape.Start("enginestate")
End Sub
$vbLabelText   $csharpLabel

Die Ausführungsanforderung und die Antwort werden im Ordner "SavedState" im Arbeitsverzeichnis gespeichert.

Drosselung

Wir können die minimale und maximale Anzahl der Verbindungen und die Verbindungsgeschwindigkeit pro Domain steuern.

public override void Init()
{
    License.LicenseKey = "LicenseKey";
    this.LoggingLevel = WebScraper.LogLevel.All;
    this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
    // Gets or sets the total number of allowed open HTTP requests (threads)
    this.MaxHttpConnectionLimit = 80;
    // Gets or sets minimum polite delay (pause)between request to a given domain or IP address.
    this.RateLimitPerHost = TimeSpan.FromMilliseconds(50);            
    //     Gets or sets the allowed number of concurrent HTTP requests (threads) per hostname
    //     or IP address. This helps protect hosts against too many requests.
    this.OpenConnectionLimitPerHost = 25;
    this.ObeyRobotsDotTxt = false;
    //     Makes the WebSraper intelligently throttle requests not only by hostname, but
    //     also by host servers' IP addresses. This is polite in-case multiple scraped domains
    //     are hosted on the same machine.
    this.ThrottleMode = Throttle.ByDomainHostName;
    this.Request("https://www.Website.com", Parse);
}
public override void Init()
{
    License.LicenseKey = "LicenseKey";
    this.LoggingLevel = WebScraper.LogLevel.All;
    this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
    // Gets or sets the total number of allowed open HTTP requests (threads)
    this.MaxHttpConnectionLimit = 80;
    // Gets or sets minimum polite delay (pause)between request to a given domain or IP address.
    this.RateLimitPerHost = TimeSpan.FromMilliseconds(50);            
    //     Gets or sets the allowed number of concurrent HTTP requests (threads) per hostname
    //     or IP address. This helps protect hosts against too many requests.
    this.OpenConnectionLimitPerHost = 25;
    this.ObeyRobotsDotTxt = false;
    //     Makes the WebSraper intelligently throttle requests not only by hostname, but
    //     also by host servers' IP addresses. This is polite in-case multiple scraped domains
    //     are hosted on the same machine.
    this.ThrottleMode = Throttle.ByDomainHostName;
    this.Request("https://www.Website.com", Parse);
}
Public Overrides Sub Init()
	License.LicenseKey = "LicenseKey"
	Me.LoggingLevel = WebScraper.LogLevel.All
	Me.WorkingDirectory = AppSetting.GetAppRoot() & "\ShoppingSiteSample\Output\"
	' Gets or sets the total number of allowed open HTTP requests (threads)
	Me.MaxHttpConnectionLimit = 80
	' Gets or sets minimum polite delay (pause)between request to a given domain or IP address.
	Me.RateLimitPerHost = TimeSpan.FromMilliseconds(50)
	'     Gets or sets the allowed number of concurrent HTTP requests (threads) per hostname
	'     or IP address. This helps protect hosts against too many requests.
	Me.OpenConnectionLimitPerHost = 25
	Me.ObeyRobotsDotTxt = False
	'     Makes the WebSraper intelligently throttle requests not only by hostname, but
	'     also by host servers' IP addresses. This is polite in-case multiple scraped domains
	'     are hosted on the same machine.
	Me.ThrottleMode = Throttle.ByDomainHostName
	Me.Request("https://www.Website.com", Parse)
End Sub
$vbLabelText   $csharpLabel

Drosseleigenschaften

  • MaxHttpConnectionLimit


    Gesamtzahl der erlaubten offenen HTTP-Anfragen (Threads)

  • RateLimitPerHost


    Minimale höfliche Verzögerung oder Pause (in Millisekunden) zwischen Anfragen an eine bestimmte Domain oder IP-Adresse

  • OpenConnectionLimitPerHost


    Zulässige Anzahl gleichzeitiger HTTP-Anfragen (Threads)

  • Drosselmodus

    Macht den WebScraper in der Lage, Anfragen nicht nur nach Hostnamen, sondern auch nach den IP-Adressen der Hostserver intelligent zu drosseln. Dies ist höflich für den Fall, dass mehrere gescrapte Domains auf demselben Rechner gehostet werden


    Erste Schritte mit IronWebscraper

    Beginnen Sie noch heute mit der Verwendung von IronWebScraper in Ihrem Projekt mit einer kostenlosen Testversion.

    Erster Schritt:
    green arrow pointer

Chaknith Bin
Software-Ingenieur
Chaknith arbeitet an IronXL und IronBarcode. Er hat tiefgehende Expertise in C# und .NET und hilft, die Software zu verbessern und Kunden zu unterstützen. Seine Erkenntnisse aus Benutzerinteraktionen tragen zu besseren Produkten, Dokumentation und einem insgesamt besseren Erlebnis bei.