我使用浏览器访问网站没有问题,但是当我以编程方式尝试访问网站进行抓取时,我收到以下错误。
The remote server returned an error: (500) Internal Server Error.
以下是我正在使用的代码。
using System.Net;
string strURL1 = "http://www.covers.com/index.aspx";
WebRequest req = WebRequest.Create(strURL1);
// Get the stream from the returned web response
StreamReader stream = new StreamReader(req.GetResponse().GetResponseStream());
System.Text.StringBuilder sb = new System.Text.StringBuilder();
string strLine;
// Read the stream a line at a time and place each one
while ((strLine = stream.ReadLine()) != null)
{
if (strLine.Length > 0)
sb.Append(strLine + Environment.NewLine);
}
stream.Close();
这个让我难过。 TIA
答案 0 :(得分:5)
是用户代理。
许多像您尝试抓取的网站都会验证用户代理字符串,以阻止您抓取它们。就像它与你一样,这很快就会阻止初级程序员尝试刮擦。它并不是一种非常可靠的方法来阻止刮伤 - 但它会让一些人感到难过。
设置User-Agent字符串将起作用。将代码更改为:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strURL1);
req.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"; // Chrome user agent string
..一切都会好的。
答案 1 :(得分:2)
看起来它正在进行某种用户代理检查。我能够在PowerShell中复制您的问题,但我注意到PowerShell cmdlet Invoke-WebRequest
工作正常。
所以我联系了Fiddler,重申它,并从Fiddler那里偷走了用户代理字符串。
尝试将UserAgent
属性设置为:
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 6.2; en-US) WindowsPowerShell/4.0
答案 2 :(得分:0)
如果您尝试从网址获取Html。
您是否可以尝试验证服务器是否需要您未能提供的请求中的某些标头。
在这里,您可以找到一个非常相似的问题的解决方案: