C # HTMLAgilityPack Website Blockierte meine IP-Adresse

c# html-agility-pack ip proxy

Frage

Ich habe HTMLAgilityPack verwendet, um HTML von der folgenden Website zu erhalten: http://tennis.wettpoint.com/de/

Es hat gut funktioniert, aber jetzt .. nach einer Stunde geht es nicht mehr!

Zuerst habe ich versucht, meinen Code zu ändern - wie ich den HTML-Code abrufen kann:

string url = "http://tennis.wettpoint.com/en/";
HtmlWeb hw = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = hw.Load(url);
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
   //Code..
}

Wie gesagt, das hat immer gut funktioniert ... bis die Seite für mich "heruntergekommen" zu sein schien. Also habe ich den Code geändert in:

using (WebClient wc = new WebClient())
{
    wc.Headers.Add("user-agent", "Mozilla/5.0 (Windows; Windows NT 5.1; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4");
    string html = wc.DownloadString("http://en.wikipedia.org/wiki/United_States");
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(html);
}

(Das funktionierte nicht für meine Website, aber arbeitete für eine andere Website)

und zumindest habe ich das jetzt, was auch funktioniert, aber nicht für meine Seite:

HtmlAgilityPack.HtmlDocument doc = GetHTMLDocumentByURL(url);

public HtmlAgilityPack.HtmlDocument GetHTMLDocumentByURL(string url)
{
    var htmlDoc = new HtmlAgilityPack.HtmlDocument();
    htmlDoc.OptionReadEncoding = false;
    var request = (HttpWebRequest)WebRequest.Create(url);
    request.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5";
    request.Method = "GET";
    using (var response = (HttpWebResponse)request.GetResponse())
    {
        using (var stream = response.GetResponseStream())
        {
            htmlDoc.Load(stream, Encoding.UTF8);
        }
    }
    return htmlDoc;
}

Nun, zuerst glaubte ich, dass die Seite nicht erreichbar ist, da ich mit keinem Browser auf die Seite zugreifen kann. Also habe ich Freunde gefragt und sie konnten auf die Seite zugreifen. Das heißt, dass meine IP blockiert wurde. . Was kann ich tun? Muss ich mein IP ändern (wie) oder Proxys (wie) benutzen .. Ich habe keine Ahnung, da ich nicht erwähnt habe, dass dies passieren würde :( Hoffe jemand kann mir helfen ..

Akzeptierte Antwort

Wikipedia überwacht die Anzahl der Anfragen, die es von einer IP-Adresse erhält, und verbietet es IPs, aggressiv den Inhalt zu scrappen. Scraping Google-Suchergebnisse werden den gleichen Effekt haben.

Am Anfang wird Wikipedia dich nur für 24 Stunden verbieten, aber wenn du weiter "beleidigst", wird deine IP dauerhaft gesperrt.

Sie können entweder - Proxy in Ihrem HttpRequest verwenden, um Ihre IP-Adresse zu ändern oder Ihre Anfragen zu verlangsamen.


Beliebte Antwort

Erste Regel des Crawlens: Höflichkeit!

Jedes Mal, wenn Sie eine Website crawlen, müssen Sie sicherstellen, dass sich Ihr Crawler an die Regeln in der robots.txt-Datei hält: http://tennis.wettpoint.com/robots.txt

User-agent: msnbot 
Crawl-delay: 1

User-agent: MJ12bot
Disallow: /

User-agent: sistrix
Disallow: /

User-agent: TurnitinBot
Disallow: /

User-agent: Raven
Disallow: /

User-agent: dotbot
Disallow: /

Das bedeutet, dass msnbot die Website explizit mit einer Verzögerung von 1 Sekunde crawlen darf. MJ12bot, Sistrix, TurnitinBot, Raven und Dotbot dürfen ausdrücklich nicht die Website crawlen. Dies ist die erste Verteidigungslinie, die Sie auf einer Website sehen werden. Dies ist ihre höflichste Art, ihre Website vor versehentlichem Missbrauch zu schützen. Weitere Informationen zu robots.txt finden Sie hier: http://www.robotstxt.org/meta.html

Sie sollten einige vernünftige Crawl-Verzögerung (1-10 Sekunden) implementieren und sehen, ob sie Ihnen ermöglichen, erneut zu crawlen.

Regel Nummer zwei: Vorsicht vor Bot-Fallen!

Dies trifft im Moment nicht auf Sie zu, aber Sie sollten im Allgemeinen eine Ware davon sein. Eine Möglichkeit, Bots zu fangen, die nicht höflich sind, besteht darin, eine explizite Regel in die robots.txt zu schreiben, die verhindert, dass alle Roboter in ein bestimmtes Verzeichnis gehen, wie zum Beispiel:

User-Agent: * Disallow: / der / epische / Roboter / Trap / Pfad

Dann irgendwo im HTML gibt es einen Link, der für Menschen nicht sichtbar ist, aber für Bots sichtbar ist:

<a href="www.mydomain.com/the/epic/robot/trap/path/gotcha.html"></a>

Natürlich wird kein Mensch jemals diesen Link sehen oder klicken, wenn er einen Browser benutzt und kein Bot, der den Regeln von robots.txt folgt, wird jemals zum /the/epic/robot/trap/path . Bots jedoch, die sich nicht an die robots.txt-Regeln halten und interne Links für Crawling-Zwecke sammeln, landen schließlich in diesem Verzeichnis, und was sie dort erwartet, ist der sichere Tod! Der Betreiber der Website sammelt und blockiert höchstwahrscheinlich alle IPs von Nutzern, die diesen Link besuchen.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum