我正在尝试使用HtmlAgilityPack解析Windows Phone上的网站内容。我目前的代码是:
HtmlWeb.LoadAsync(url, DownloadCompleted);
...
void DownloadCompleted(object sender, HtmlDocumentLoadCompleted e)
{
if (e.Error == null)
{
HtmlDocument doc = e.Document;
if (doc != null)
{
string test = doc.DocumentNode.Element("html").Element("body").Element("form").Elements("div").ElementAt(2).Element("table").Element("tbody").Elements("tr").ElementAt(4).Element("td").Element("center").Element("div").InnerText.ToString();
System.Diagnostics.Debug.WriteLine(test);
}
}
}
目前,当我运行上述内容时,我在string test = doc.DocumentNode.Element("html").Element("body").Element("form").Elements("div").ElementAt(2).Element("table").Element("tbody").Elements("tr").ElementAt(4).Element("td").Element("center").Element("div").InnerText.ToString();
获得了ArgumentOutOfRangeException。
doc.DocumentNode.Element("html").InnerText.ToString()
似乎给了我整个页面的源代码。
我要解析的网站的网址是:http://polyclinic.singhealth.com.sg/Webcams/QimgPage.aspx?Loc_Code=BDP
答案 0 :(得分:1)
看起来你是在追踪一个特定的DIV
,如果我没有误认为你所拥有的那个有唯一标识<td class="queueNo"><center><div id="divRegPtwVal">0</div></center></td>
。
为什么不简单地使用doc.DocumentNode.SelectSingleNode("//div[@id='divRegPtwVal']")
或doc.DocumentNode.Descendants("div").Where(div => div.Id == "divRegPtwVal").FirstOrDefault()
选择ID为
的特定图像的图像源 var attrib = doc.DocumentNode.SelectSingleNode("//img[@id='imgCam2']/@src");
//I suspect, might be a slightly different property, I can't check right now
string src = attrib.InnerText;
或者:
var img = doc.DocumentNode.Descendants("img").Where(img => img.Id=="imgCam2");
string src = img.Attributes["Source"].Value;