2012-02-03 94 views
0

我正在编写自己的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应用程序

回答

5

而不是依靠HTMLAgilityPack下载它适合你,你可以用HttpWebRequest包含在HttpWebResponse,你可以检查属性下载页面。这将允许您在尝试解析内容之前执行您的检查。

+1

+1。考虑首先使用HEAD请求,而不是GET。它会给你内容类型(如果服务器支持)。 – 2012-02-03 02:35:12

+0

这就是我要求的。如何获取头部请求的内容类型?我仍然可以用htmlagilitypack下载内容。 – MonsterMMORPG 2012-02-03 03:27:55

+0

@MonsterMMORPG - 我从来没有直接使用HtmlAgilityPack(虽然基于API,我知道你可以通过一些Html来处理)。正如其他人所说,这似乎不可能直接与HtmlAgilityPack。使用'HtmlWebRequest'和'HtmlWebResponse',你可以使用内建的'ContentType'属性来获得内容类型。 – 2012-02-03 03:31:15

2

您想读取响应头中的内容类型。我不认为这可以通过我的经验与HtmlAgility包完成。

+0

这就是我问的问题。如何获取头部请求的内容类型?我仍然可以用htmlagilitypack下载内容。 – MonsterMMORPG 2012-02-03 03:28:06

1

我从来没有使用html敏捷包,但我继续前进,看着文档。

我看到您将HtmlWeb对象上的PreRequest字段设置为PreRequestHandler委托。还有一个PostResponse字段需要一个PostResponseHandler委托。看起来HtmlWeb对象会以HttpWebResponse对象的形式向服务器传递实际响应。

但是,当代码中的代码完成时,它看起来像敏捷包将继续做它会做的任何事情。它遇到非HTML时是否会引发异常?您可能需要从PostResponse函数中抛出自己的异常,并在调用Load()时捕获它。

正如我所说的,我没有尝试过这些。希望它能让你开始朝着正确的方向前进。

+0

是的,它会抛出错误。 – MonsterMMORPG 2012-02-03 03:26:28

相关问题