c#,从网站获取信息

时间:2012-11-21 07:49:46

标签: c# html windows-phone-7.1

我正在尝试解析以下HTML文件,我希望得到key的值。这是在Silverlight for Windows手机上完成的。

</tr>
<tr><td width="26"><div style="width: 26px; height: 1px;"><spacer type="block" width="26" height="1" /></div></td><td width="60" id="tbtime">10:00</td><td width="70%" id="tbcol"><a href="/repertoir/filminfo.php?id=596">Ральф</a></td><td width="30%" id="tbcol" align="center">100 руб.</td></tr><tr><td width="26" height="4"><div style="width: 26px; height: 4px;"><spacer type="block" width="26" height="4" /></div></td><td width="60"></td><td width="100%" colspan="2"></td></tr><tr><td width="26"><div style="width: 26px; height: 1px;"><spacer type="block" width="26" height="1" /></div></td><td width="60" id="tbtime">12:00</td><td width="70%" id="tbcol"><a href="/repertoir/filminfo.php?id=595"> Сумерки. Сага. Рассвет: Часть 2</a></td><td width="30%" id="tbcol" align="center">100 - 120 руб.</td></tr><tr><td width="26" height="4"><div style="width: 26px; height: 4px;"><spacer type="block" width="26" height="4" /></div></td><td width="60"></td><td width="100%" colspan="2"></td></tr><tr><td width="26"><div style="width: 26px; height: 1px;"><spacer type="block" width="26" height="1" /></div></td><td width="60" id="tbtime">14:20</td><td width="70%" id="tbcol"><a href="/repertoir/filminfo.php?id=595"> Сумерки. Сага. Рассвет: Часть 2</a></td><td width="30%" id="tbcol" align="center">120 - 150 руб.</td></tr><tr><td width="26" height="4"><div style="width: 26px; height: 4px;"><spacer type="block" width="26" height="4" /></div></td><td width="60"></td><td width="100%" colspan="2"></td></tr><tr><td width="26"><div style="width: 26px; height: 1px;"><spacer type="block" width="26" height="1" /></div></td><td width="60" id="tbtime">16:40</td><td width="70%" id="tbcol"><a href="/repertoir/filminfo.php?id=607">Бункер</a></td><td width="30%" id="tbcol" align="center">150 руб.</td></tr><tr><td width="26" height="4"><div style="width: 26px; height: 4px;"><spacer type="block" width="26" height="4" /></div></td><td width="60"></td><td width="100%" colspan="2"></td></tr><tr><td width="26"><div style="width: 26px; height: 1px;"><spacer type="block" width="26" height="1" /></div></td><td width="60" id="tbtime">18:40</td><td width="70%" id="tbcol"><a href="/repertoir/filminfo.php?id=595"> Сумерки. Сага. Рассвет: Часть 2</a></td><td width="30%" id="tbcol" align="center">150 - 180 руб.</td></tr><tr><td width="26" height="4"><div style="width: 26px; height: 4px;"><spacer type="block" width="26" height="4" /></div></td><td width="60"></td><td width="100%" colspan="2"></td></tr><tr><td width="26"><div style="width: 26px; height: 1px;"><spacer type="block" width="26" height="1" /></div></td><td width="60" id="tbtime">21:00</td><td width="70%" id="tbcol"><a href="/repertoir/filminfo.php?id=595"> Сумерки. Сага. Рассвет: Часть 2</a></td><td width="30%" id="tbcol" align="center">150 - 180 руб.</td></tr><tr><td width="26" height="4"><div style="width: 26px; height: 4px;"><spacer type="block" width="26" height="4" /></div></td><td width="60"></td><td width="100%" colspan="2"></td></tr></table>
<br /><br />
<br /><br />

 public void myparsing()
    {          
       HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
        WebClient webClient = new WebClient();
        document.LoadHtml(webClient.DownloadString("http://udokan.chita.ru/"));
        var node = document.DocumentNode.SelectSingleNode("//body/table/tr/td[4]/table");
        if (node != null)
        {
            var innerText = node.InnerText;              
            richTextBox1.AppendText(innerText);
        }       

    }

我想获得有关repertoir的信息,但我不能。我有HttpAgilityPack的问题。方法SelectNodes不起作用。 请帮助我,我很抱歉我的英语不好。

2 个答案:

答案 0 :(得分:0)

我不是百分百肯定,但从头脑中我有一个想法:

请记住,WebClient和Silverlight异步工作。因此,在将Html传递给LoadHtml方法之前,请确保已下载Html。因此,最好使用DownloadStringAsync并在完整的回调中加载文档。

我会从html源代码的字符串开始,检查XPath查询是否正确。

查看你的html网站和来源没有“// body / table / tr / td [4] / table”

// body / table中有1个表有4个TD元素,但请记住这是一个基于零的索引数组...所以td [3]将是第四个元素......

所以论文只是一些想法,我希望它有所帮助..

答案 1 :(得分:0)

你可以这样做:

        public void MyParsing()
    {
        const string baseUrl = "http://udokan.chita.ru/";
        var htmlDoc = new HtmlDocument();
        var webClient = new WebClient();
        htmlDoc.LoadHtml(webClient.DownloadString(baseUrl));
        var htmlNodeCollection = htmlDoc.DocumentNode.SelectNodes("//a[@href]");
        if (htmlNodeCollection != null)
        {
            foreach (var link in htmlNodeCollection)
            {
                try
                {
                    if(link.Attributes["href"].Value.Contain("repert"))
                    {
                    var newUrl = new Uri(new Uri(baseUrl), link.Attributes["href"].Value).AbsoluteUri;
                    var queries = HttpUtility.ParseQueryString(string.Join(string.Empty, newUrl.Split('?').Skip(1)));
                    var id = queries["id"];
                    richTextBox1.AppendText(id);
                    }
                }
                catch (Exception)
                {
                }
            }
        }

    }