检查URL是否为text/html或其他文件类型,如图像
我正在编写自己的C#4.0 WPF特定网络爬虫。目前我正在使用htmlagilitypack处理HTML文档。检查URL是否为text/html或其他文件类型,如图像
现在下面我下载
HtmlWeb hwWeb = new HtmlWeb();
hwWeb.UserAgent = lstAgents[GenerateRandomValue.GenerateRandomValueMin(irAgentsCount, 0)];
hwWeb.PreRequest = OnPreRequest;
HtmlDocument hdMyDoc;
hwWeb = new HtmlWeb
{
AutoDetectEncoding = false,
OverrideEncoding = Encoding.GetEncoding("iso-8859-9"),
};
hdMyDoc = hwWeb.Load(srPageUrl);
private static bool OnPreRequest(HttpWebRequest request)
{
request.AllowAutoRedirect = true;
return true;
}
页现在我的问题的方式是我希望能够确定给定的URL是否为text/html(抓取的内容)或图像/ PDF只是其他类型。我怎样才能做到这一点 ?
非常感谢您的回答。
C#4.0中,WPF应用程序
而不是依靠HTMLAgilityPack下载它适合你,你可以用HttpWebRequest
包含在HttpWebResponse
,你可以检查属性下载页面。这将允许您在尝试解析内容之前执行您的检查。
您想读取响应头中的内容类型。我不认为这可以通过我的经验与HtmlAgility包完成。
这就是我问的问题。如何获取头部请求的内容类型?我仍然可以用htmlagilitypack下载内容。 – MonsterMMORPG 2012-02-03 03:28:06
我从来没有使用html敏捷包,但我继续前进,看着文档。
我看到您将HtmlWeb对象上的PreRequest字段设置为PreRequestHandler委托。还有一个PostResponse字段需要一个PostResponseHandler委托。看起来HtmlWeb对象会以HttpWebResponse对象的形式向服务器传递实际响应。
但是,当代码中的代码完成时,它看起来像敏捷包将继续做它会做的任何事情。它遇到非HTML时是否会引发异常?您可能需要从PostResponse函数中抛出自己的异常,并在调用Load()时捕获它。
正如我所说的,我没有尝试过这些。希望它能让你开始朝着正确的方向前进。
是的,它会抛出错误。 – MonsterMMORPG 2012-02-03 03:26:28
+1。考虑首先使用HEAD请求,而不是GET。它会给你内容类型(如果服务器支持)。 – 2012-02-03 02:35:12
这就是我要求的。如何获取头部请求的内容类型?我仍然可以用htmlagilitypack下载内容。 – MonsterMMORPG 2012-02-03 03:27:55
@MonsterMMORPG - 我从来没有直接使用HtmlAgilityPack(虽然基于API,我知道你可以通过一些Html来处理)。正如其他人所说,这似乎不可能直接与HtmlAgilityPack。使用'HtmlWebRequest'和'HtmlWebResponse',你可以使用内建的'ContentType'属性来获得内容类型。 – 2012-02-03 03:31:15