El sitio web de C # HTMLAgilityPack bloqueó mi dirección IP

c# html-agility-pack ip proxy

Pregunta

Estaba usando HTMLAgilityPack para obtener el HTML del siguiente sitio web: http://tennis.wettpoint.com/en/

Funcionó bien, pero ahora ... ¡después de una hora ya no funciona!

Primero intenté cambiar mi Código, sobre cómo recuperar el HTML:

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..
}

Como dije, eso siempre funcionó bien ... hasta que el sitio me pareció "caído" ... Así que cambié el código a:

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);
}

(Eso no funcionó para mi sitio, pero funcionó para otro sitio)

Y al menos ahora tengo esto, que también funciona, pero no para mi sitio:

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;
}

Bueno, al principio creí que el sitio está caído, porque tampoco puedo acceder al sitio con ningún navegador. Así que le pregunté a mis amigos y pudieron acceder al sitio. Eso significa que mi IP ha sido bloqueada ... Por lo tanto, ¿qué? . ¿Que puedo hacer? ¿Necesito cambiar mi Ip (cómo) o usar Proxys (cómo)? No tengo idea, ya que no mencioné que esto sucedería :( Espero que alguien pueda ayudarme ...

Respuesta aceptada

Wikipedia controla la cantidad de solicitudes que recibe de una dirección IP y prohibirá que las IP rasguen agresivamente su contenido. Raspar los resultados de búsqueda de Google tendrá el mismo efecto.

Inicialmente, Wikipedia solo lo prohibirá por 24 horas, pero si continúa "ofendiendo", su IP será prohibida permanentemente.

Puede: usar proxy en su HttpRequest para cambiar su dirección IP o ralentizar sus solicitudes.


Respuesta popular

Primera regla del rastreo: ¡la cortesía!

Cada vez que rastree un sitio web debe asegurarse de que su rastreador cumpla con las reglas en su archivo robots.txt: 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: /

Esto significa que a msnbot se le permite explícitamente rastrear el sitio web con un retraso de 1 segundo. MJ12bot, sistrix, TurnitinBot, Raven y dotbot NO están autorizados explícitamente a rastrear ningún sitio web. Ahora, esta es la primera línea de defensa que verá desde un sitio web. Esta es su forma más educada de proteger su sitio web de abusos accidentales. Para obtener más información sobre robots.txt, consulte aquí: http://www.robotstxt.org/meta.html

Debe implementar un retraso de rastreo razonable (1-10 segundos) y ver si le permiten rastrear nuevamente.

Regla número dos: ¡cuidado con las trampas bot!

Esto no se aplica a usted en este momento, pero debería ser un producto de ello en general. Una forma de detectar bots que no son educados es poner una regla explícita en el archivo robots.txt que prohíba a todos los robots ir a un directorio específico, como:

User-agent: * No permitir: / the / epic / robot / trap / path

Luego, en algún lugar del HTML hay un enlace, que no es visible para los humanos, pero es visible para los robots:

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

Claramente, ningún humano verá ni hará clic en este enlace si está usando un navegador y ningún bot que siga las reglas de robots.txt irá a /the/epic/robot/trap/path . Sin embargo, los bots que no cumplen con las reglas de robots.txt y recopilan enlaces internos con fines de rastreo terminarán finalmente en ese directorio, y lo que les espera es una muerte segura. El operador del sitio web es más probable que recopile y bloquee todas las IP de los usuarios que visitan ese enlace.



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué