错误 500 Web 请求无法抓取网站
Error 500 Web Request Can't Scrape WebSite
我用浏览器访问网站没问题,但是当我以编程方式尝试访问网站进行抓取时,出现以下错误。
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
它是用户代理。
许多网站(例如您尝试抓取的网站)会验证用户代理字符串以阻止您抓取它们。就像你一样,这很快就会阻止初级程序员尝试抓取。它并不是真正阻止刮擦的可靠方法 - 但它难倒了一些人。
设置用户代理字符串将起作用。将代码更改为:
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
..会好的
它看起来像是在进行某种用户代理检查。我能够在 PowerShell 中重现您的问题,但我注意到 PowerShell cmdlet Invoke-WebRequest
工作正常。
所以我连接了 Fiddler,重新运行它,并从 Fiddler 中窃取了用户代理字符串。
尝试将 UserAgent
属性 设置为:
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 6.2; en-US) WindowsPowerShell/4.0
我用浏览器访问网站没问题,但是当我以编程方式尝试访问网站进行抓取时,出现以下错误。
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
它是用户代理。
许多网站(例如您尝试抓取的网站)会验证用户代理字符串以阻止您抓取它们。就像你一样,这很快就会阻止初级程序员尝试抓取。它并不是真正阻止刮擦的可靠方法 - 但它难倒了一些人。
设置用户代理字符串将起作用。将代码更改为:
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
..会好的
它看起来像是在进行某种用户代理检查。我能够在 PowerShell 中重现您的问题,但我注意到 PowerShell cmdlet Invoke-WebRequest
工作正常。
所以我连接了 Fiddler,重新运行它,并从 Fiddler 中窃取了用户代理字符串。
尝试将 UserAgent
属性 设置为:
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 6.2; en-US) WindowsPowerShell/4.0