2010-01-18 75 views
1

我正在构建一个需要从合作伙伴网站刮取信息的网站。现在我的刮码与其他网站很好,但不是这个。它是一个普通的.html网站。我的想法是,它可能会产生一些如何与PHP(网站是用PHP构建的)。为什么我不能刮网站的任何想法?

我不知道我只是猜测生成的部分,我需要你的专业人士帮助。如果重要的话,我使用的是我的代码。 htmlDocument是htmlAgilityPack,但与它无关。结果在我尝试的网站上为空。

 string result; 
     var objRequest = System.Net.HttpWebRequest.Create(strUrl); 
     var objResponse = objRequest.GetResponse(); 

     using (var sr = new StreamReader(objResponse.GetResponseStream())) 
     { 
      result = sr.ReadToEnd(); 
      sr.Close(); 

      var doc = new HtmlDocument(); 
      doc.LoadHtml(result);     

      foreach (var c in doc.DocumentNode.SelectNodes("//a[@href]")) 
      { 
       litStatus.Text += c.Attributes["href"].Value + "<br />"; 
      } 
     } 

编辑:

这是从W3验证,可能有这个东西吗?

对不起,我无法验证该文档,因为上线422是包含在一个或 更多,我不能解释为UTF-8字节(换言之,发现字节不是在指定的字符编码有效 值)。请检查文件内容和 字符编码指示。

错误是:UTF8“版权所有\ xA9”不映射到Unicode

+1

那么'result'的值是什么? – 2010-01-18 12:42:49

+0

@Marc:OP状态“结果为null,我试着在网站上” – 2010-01-18 12:44:35

+0

我试过用maby 15个网站,我需要的是唯一一个null .. – 2010-01-18 12:46:06

回答

2

我会通过看我从一些简单的像wget有什么反应或使用工具,如http://www.fiddler2.com启动/ fiddler2来检测响应并检查你收到的任何头文件

有时网站会返回来自不同代理字符串的不同响应等等,所以你可能需要调整你的请求头文件和伪装成一个使用不同的浏览器来获取您正在查找的数据如果您在运行脚本的同一台机器上使用Fiddler,您应该能够看到从浏览器请求页面的确切内容并从您的脚本请求页面。

甚至有可能是一个简单的302重定向或类似的情况,你的代码没有遵循。

如果您可以通过浏览器访问该页面,那么您将一定能够通过发送与您的浏览器发送的请求完全相同的请求来访问它。

编辑Fiddler从您自己的代码中使用起来有点棘手,因为它的行为像一个代理 - 它使用普通浏览器设置自己,但是您必须手动告诉代码通过127.0.0.1端口上的代理运行8888为了让Fiddler看到你的结果。

+0

我得到了萤火虫,但我不知道在标题中看什么? srry – 2010-01-18 13:03:16

+0

这就是为什么Fiddler是有用的,因为你想要的是找到你的asp.net脚本所做的请求和浏览器的请求之间的_difference_。每个方向的头文件都很有用 - 你可能会从asp.net代码中的请求和响应对象中找到这些头文件。 – glenatron 2010-01-18 14:22:42

+0

我得到了提琴手现在运行,我看了一些视频,但我没有得到任何不同的请求,而不是从我能看到的。如果你只花了一分钟时间,并且看到它们不同,我会非常棒。你不必,但我会appriciate它。 addy是 http://www.raggarportalen.se/Kalender.html – 2010-01-18 15:18:55

1

要排除故障,请检查objResponse.StatusCode和objResponse的值。状态说明:

string result; 
var objRequest = System.Net.HttpWebRequest.Create(strUrl); 
var objResponse = (System.Net.HttpWebResponse) objRequest.GetResponse(); 

Console.WriteLine(objResponse.StatusCode); 
Console.WriteLine(objResponse.StatusDescription); 
... 
+0

我无法访问objResponse.StatusCode和objResponse.StatusDescription。 – 2010-01-18 12:53:29

+0

为什么不呢?我假设你在使用语句之前已经尝试过类似于''Console.WriteLine(objResponse.StatusCode);''。当你尝试时会发生什么?代码是否不能编译?它在运行时崩溃吗?打印什么值? – codeape 2010-01-18 12:57:30

+0

objResponse不包含该选项,StatusCode。 – 2010-01-18 12:59:58

1

的问题似乎是在上线421的注释字符:

<!-- KalenderMx v1.4 � by shiba-design.de --> 

这是声明的字符编码的外ISO-8859-1

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 

您可能会尝试通过过滤器运行解析的文档字符串到convertremove违规ch字符串中的字符,然后用htmlAgilityPackLoadHtml()进行评估。

+0

我的问题是我可以用htmlAgilityPack做任何事情。当我刮去网站时,结果为空。我敢打赌,这与评论有关,但我不知道如何解决它 – 2010-01-18 14:38:53

相关问题