0

我正在使用 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(如何)或使用代理(如何)..我不知道,因为我没有提到会发生这种情况:(希望有人能帮助我..

4

2 回答 2

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 中放置一个明确的规则,禁止所有机器人进入特定目录,例如:

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

于 2012-10-15T16:45:28.773 回答
4

维基百科监控它从 IP 地址获得的请求数量,并将禁止 IP 积极抓取其内容。抓取 Google 搜索结果将具有相同的效果。

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

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

于 2012-10-15T16:20:50.930 回答