C # HTMLAgilityPack Website заблокировал мой IP-адрес

c# html-agility-pack ip proxy

Вопрос

Я использовал HTMLAgilityPack, чтобы получить HTML-код с сайта: http://tennis.wettpoint.com/en/

Он работал нормально, но теперь .. через час он больше не работает!

Сначала я попытался изменить свой код - как получить 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..
}

Как я уже сказал, это всегда работало нормально, пока сайт не казался мне «вниз». Я изменил код на:

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

(Это не сработало для моего сайта, но работало на другом сайте)

и, по крайней мере, у меня есть это сейчас, что также работает, но не для моего сайта:

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

Сначала я поверила, что сайт не работает, потому что я не могу получить доступ к сайту с помощью любого браузера. Поэтому я спросил друзей, и они смогли получить доступ к сайту .. Таким образом, мой IP был заблокирован .. Почему бы. . Что я могу сделать? Мне нужно изменить Ip (как) или использовать Proxys (как). У меня нет подсказки, поскольку я не упоминал, что это произойдет: (Надеюсь, кто-то может мне помочь ..

Принятый ответ

Википедия контролирует количество запросов, получаемых с IP-адреса, и запрещает IP-адреса от агрессивного соскабливания контента. Скремблирование результатов поиска Google будет иметь тот же эффект.

Первоначально Wikipedia будет запрещать вас только 24 часа, но если вы будете продолжать «оскорблять», ваш IP-адрес будет запрещен навсегда.

Вы можете использовать прокси в своем HttpRequest, чтобы изменить свой IP-адрес или замедлить ваши запросы.


Популярные ответы

Первое правило ползания: вежливость!

Каждый раз, когда вы просматриваете сайт, вы должны убедиться, что ваш искатель соблюдает правила в файле 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: /

Это означает, что msnbot явно разрешено сканировать веб-сайт с задержкой в ​​1 секунду. MJ12bot, sistrix, TurnitinBot, Raven и dotbot явно не позволяют сканировать любой из веб-сайтов. Теперь это первая линия защиты, которую вы увидите на веб-сайте. Это их самый вежливый способ защитить свой сайт от случайного злоупотребления. Для получения дополнительной информации о файле robots.txt см. Здесь: http://www.robotstxt.org/meta.html

Вы должны выполнить некоторую разумную задержку обхода (1-10 секунд) и посмотреть, разрешают ли они снова выполнять сканирование.

Правило номер два: следите за бот-ловушками!

На данный момент это не относится к вам, но вы должны быть его продуктом в целом. Один из способов поймать ботов, которые не вежливы, - это установить явное правило в файле robots.txt, который запрещает всем роботам переходить в конкретный каталог, например:

User-agent: * Disallow: / the / epic / robot / trap / path

Затем где-то в HTML есть ссылка, которая не видна людям, но видима для ботов:

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

Ясно, что ни один человек никогда не увидит или не щелкнет по этой ссылке, если они используют браузер, и никакой бот, который следует правилам robots.txt, никогда не пойдет в /the/epic/robot/trap/path . Тем не менее, боты, которые не соблюдают правила robots.txt и собирают внутренние ссылки для целей сканирования, в конечном итоге окажутся в этом каталоге, и их ждет смерть! Оператор веб-сайта, скорее всего, собирает и блокирует все IP-адреса пользователей, которые посещают эту ссылку.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему