C#HTMLAgilityPack网站阻止了我的IP地址

时间:2012-10-15 16:12:53

标签: c# proxy ip html-agility-pack

我使用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(如何)...我不知道,因为我没有提到这会发生:(希望有人可以帮助我..

2 个答案:

答案 0 :(得分:5)

爬行的第一条规则:礼貌!

每次抓取网站时,都必须确保抓取工具遵守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中放置一个明确的规则,禁止所有机器人进入特定目录,例如:

用户代理:* 禁止:/ / 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。

答案 1 :(得分:4)

维基百科监控从IP地址获取的请求数量,并禁止IP积极地抓取其内容。刮刮谷歌搜索结果也会产生同样的效果。

最初维基百科只会禁止你24小时,但如果你继续“冒犯”,你的知识产权将被永久禁止。

您可以 - 在HttpRequest中使用代理来更改您的IP地址或减慢您的请求。