我使用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(如何)...我不知道,因为我没有提到这会发生:(希望有人可以帮助我..
答案 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地址或减慢您的请求。