地址:
http://www.yellowpage.com.cn/yellowpages/index.php?action=yellowPages&method=moreHotClass&keyword=&field=&listSizeStart=1&¤tPage=2
在浏览器打开是正常显示的。但是用firbug或者其他抓包工具查看,缺显示500错误
是不是采用了什么技术手段?还是其他什么问题啊,求指教
我用工具去抓取这个网页也是提示“500错误”,得不到HTML。请问这个怎么解决?是需要写什么参数吗?
谢谢解答!
经过就是,网页设置
Response.StatusCode = 500 后用工具抓取就要报500错误。
请问有解决方案吗
对于这种问题,尽量不要用HttpWebRequest这种去抓了。因为HttpWebRequest已经被封装过了,有很多情况处理起来不灵活。建议用更底层的代码,去抓这种网页。比如sockt。
具体代码太多,就不贴上来了,请搜索“c# socket抓取网页“,很多例子。
经测试,你哪个网址已通过。你可以自己试一下。
Http status code和显示正常没有必然联系。本质上来讲,你在浏览器里输入一个地址,服务器给出响应,假设类型为text/html,并且返回了html内容。你的浏览器接受到了类型为text/html的内容,就把它展示出来,整个过程中甚至可以跟status code没有任何关系。status code更多感觉是一种额外信息,比如你是前端开发者,调用服务器端的一个基于http协议的接口,前端和后端两名程序员之间有约定(不仅是约定,而且通常大多数系统都这么做):403表示没有权限,400表示输入格式错误等等。这样前端程序员就可以根据status code来调试自己的程序,或者给用户友好的提示信息。具体的status code定义参照这里。你说的这个站点的情况,完全可以做到。比如我自己建了一个空白页面(我这里用ASP.NET MVC做例子)。
public ActionResult Index()
{
Response.StatusCode = 500;
return View();
}
我把相应的status code改成了500,然后什么都没做就返回一个页面。结果页面还是正常显示的。
但是我用工具去抓取这个网页也是提示“500错误”,得不到HTML
请问有什么解决方法吗?
@基本原则: 你是要用工具去抓,还是要用代码去拿?如果是用代码,用什么语言?
firbug或者其他抓包工具 的UserAgent头是??
Host | www.yellowpage.com.cn |
User-Agent | Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20100101 Firefox/8.0 |
Accept | text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 |
Accept-Language | zh-cn,zh;q=0.5 |
Accept-Encoding | gzip, deflate |
Accept-Charset | GB2312,utf-8;q=0.7,*;q=0.7 |
Connection | keep-alive |
用 Fiddler 抓包
一样的,抓包工具都是显示500错误。经过测试,的确是再服务端页面设置了Response.StatusCode = 500,就是这种效果
@基本原则: 你的代码写得有问题,我们怎么帮你解决??至少抓到的东西显示了已经输出到客户端的内容,那些没输出到客户端的内容你检查一下服务器端代码不就可以解决了吗?我想你正常要输出的网页代码不是象我们抓到的那样吧,如果是,真的无话可说了
我用fiddler试了一下,是返回500,但取到数据了不就OK了吗?
问题就是,用程序去抓的时候,返回是“远程服务器错误”啊,直接抛错了哦
能取到数据我也就不纠结这个问题了。
@基本原则: 你的程序用的是什么语言? 程序的运行环境是哪里,是Browser 还是其他的,具体说一下
@基本原则: 这个页面应该不是你们公司的,是吗?
@基本原则: Fiddler 直接用WinInet Api 的
@基本原则: 直接给你一个代码吧?
string url = "http://www.yellowpage.com.cn/yellowpages/index.php?action=yellowPages&method=moreHotClass&keyword=&field=&listSizeStart=1&¤tPage=2";
HttpWebRequest req;
HttpWebResponse res;
string content;
req = (HttpWebRequest)WebRequest.Create(url1);
req.CookieContainer = new CookieContainer();
req.Method = "GET";
Console.WriteLine("Request:" + "\t" + url1);
try
{
res = (HttpWebResponse)req.GetResponse();
}
catch (System.Net.WebException ex)
{
res = (HttpWebResponse)ex.Response;
}
StreamReader reader = new StreamReader(res.GetResponseStream(), System.Text.Encoding.Default);
content = reader.ReadToEnd();
Trace.WriteLine(content);
reader.Close();
res.Close();
@基本原则: 这个问题在StackOverFlow 上有回答
@基本原则: 提问如果切中要害,就不会......
@ChatinCode:
这个很强悍,果然是可以的
@ChatinCode: 这个貌似已经可以的啊
这个网站本身就是返回500错误信息,页面里面也是。是服务器错误吧,不是什么手段,你看它返回的页面里面的最下面,多了一个html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>500 Internal Server Error</title> </head><body> <h1>Internal Server Error</h1> <p>The server encountered an internal error or misconfiguration and was unable to complete your request.</p> <p>Please contact the server administrator, admin@example.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.</p> <p>More information about this error may be available in the server error log.</p> </body></html>
我也有同样问题,关注。