2011-04-15 107 views
0

我一直试图解析一段时间php生成的网页(不是网站)。我尝试通过C#中的HTMLAgility和PHP来使用xpath进行解析。起初我以为我不是正确解析,由于不正确的值。从web脚本解析脚本更改源代码内容?

后来,我发现实际上我正确解析它。但是在该页面中有一个脚本正在更改加载时的值。怎么样,我不知道。

我是新来解析,所以这里是根据我发生了什么:

  1. 我下载内容的源代码。我想分析的部分是有点像这样:

    <b id="solved_b">0</b> 
    
  2. 页面加载时,在源代码中的脚本时,我解析使用XPath的值变化大于0

  3. 以外的东西,原始值,即0被解析,而不是脚本更改值。

那么,我该如何解析更改后的值而不是原来的值呢?

我试图解析页面 http://felix-halim.net/uva/hunting.php?id=59756

这里是HTMLAgility的片段:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using HtmlAgilityPack; 
namespace ParseFelix { 
    class WebParser { 
     string webUrl; 

     public WebParser(string url) { 

      webUrl = "http://felix-halim.net/uva/hunting.php?id=59756"; 

      HtmlWeb htmlWeb = new HtmlWeb(); 
      HtmlDocument htmldoc = htmlWeb.Load(webUrl); 

      var username = htmldoc.DocumentNode.SelectSingleNode("/html/body/div/h2/i"); 
      var submittedStats = htmldoc.DocumentNode.SelectSingleNode(".//*[@id=\"submissions_b\"]"); 
      string content = htmldoc.DocumentNode.InnerHtml; 
      //System.IO.File.WriteAllText("D:\\exp\\felix\\parsed.txt", content); 
      var acceptedStats = htmldoc.DocumentNode.SelectSingleNode(".//*[@id=\"solved_b\"]"); 
      Console.WriteLine("Username is {0}, you submitted {1} solutions, and {2} were accepted", username.InnerText, submittedStats.InnerText, acceptedStats.InnerText); 

      } 
    } 
} 

回答

0

那么你要做的是解析JavaScript的权利? 这是AFAIK不可能(除了编写自己的解析器或使用现有的解析器)。 你想要的是读操纵的DOM,并且这根本不是微不足道的

+0

我会尽力的。感谢您的回复:D – LordAmit 2011-04-15 05:47:37

+0

可以请您提供一些关于如何阅读操作DOM的教程? – LordAmit 2011-04-15 07:02:05

+0

不像前面提到的那样,你必须编写自己的JS解析器,并连接到你不想听的事件。 – 2011-04-15 07:29:14

0

使用Fiddler - 你会看到网站让AJAX查询和一些值从JSON获得:

POST http://felix-halim.net/uva/service2.php HTTP/1.1 
Host: felix-halim.net 
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0 
Accept: */* 
Accept-Language: lt 
Accept-Encoding: gzip, deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Proxy-Connection: keep-alive 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
X-Requested-With: XMLHttpRequest 
Referer: http://felix-halim.net/uva/hunting.php?id=59756 
Content-Length: 73 
Cookie: PHPSESSID=o6if4t4vqadv7ia6vbqcfcvi75 
Pragma: no-cache 
Cache-Control: no-cache 

{"method":"uva2.chat_update","params":[12150,59756,"guest",3127,8744317]} 

和响应:

HTTP/1.0 200 OK 
Date: Fri, 15 Apr 2011 05:32:08 GMT 
Server: Apache 
X-Powered-By: PHP/5.2.15 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Vary: Accept-Encoding 
Content-Type: text/html 
Content-Length: 2069 

[null,[["0","guest","1302842169"],["0","guest","1302793161"]<SKIPPED> 
+0

顺便说一句,如果你想看看你没有javascript,不错的工具是Firefox + Noscript + Firebug – VikciaR 2011-04-15 05:37:21

+0

啊,我猜我的猜测是或多或少正确。这是我第二天的解析。所以我需要更多地研究这个问题。谢谢你的回复。^_^ – LordAmit 2011-04-15 05:46:34