我一直试图解析php生成的网页(不是网站)。我尝试在C#和PHP中使用xpath通过HTMLAgility进行解析。起初我认为由于值不正确,我没有正确解析。
后来,我发现实际上我正在解析它。但是该页面中有一个脚本正在加载时更改值。怎么,我不知道。
我是解析的新手,所以这就是根据我发生的事情:
我正在下载内容的源代码。我要解析的部分有点像这样:
<b id="solved_b">0</b>
加载页面时,源代码中的脚本会将值更改为0以外的值。
当我使用xpath进行解析时,会解析原始值,即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 :(得分: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>
答案 1 :(得分:0)
你要做的是解析javascript吧? 这是AFAIK不可能的(除了编写自己的解析器或使用现有的解析器)。 你想要的是阅读被操纵的DOM,这根本不是微不足道的