0

我想在网页中解析以下内容:

<h1 class="eTitle">bla bla bla v1.0</h1>

我想在使用 WPF 创建的文本框中显示“bla bla bla v.1.0”。我的代码如下,但是当我单击按钮时它在文本框中什么也不显示。

private void Button_Click_1(object sender, RoutedEventArgs e)
    {
           WebClient webClient = new WebClient();
           webClient.Encoding = Encoding.UTF8;
           webClient.DownloadFile("http://blablabla.com", "blabla.htm");

        HtmlDocument htmldoc = new HtmlDocument();
        htmldoc.Load("blabla.htm");
        var titlenode = htmldoc.DocumentNode.SelectSingleNode("blabla");

        textbox1.Text = "" + titlenode;
    }
private void textbox1_TextChanged(object sender, TextChangedEventArgs e)
    {
    }

实际上,我将页面保存到 .htm 文件中并从中读取。我可以避免这样做吗?

4

3 回答 3

2

为避免下载文件,您可以使用webClient.DownloadString("http://blablabla.com/blabla.htm");

于 2013-08-29T14:49:15.413 回答
1

您获取节点的 XPath 表达式不正确。

如果您想获得单个h1节点,请使用此

var titlenode = htmldoc.DocumentNode.SelectSingleNode("//h1");

如果您想h1使用标题eTitle节点获得单身,请使用此

var titlenode = htmldoc.DocumentNode.SelectSingleNode("//h1[@title = 'eTitle']");

有关更多信息,请参阅此页面

然后您必须访问节点值并显示它。

于 2013-08-29T14:48:50.070 回答
0

为什么不直接使用 anHttpWebRequest来拉取html文件本身呢?

来源:使用 HttpWebRequest 类获取网页的 html 源

private string getHtml(string url)
{
    if(String.IsNullOrWhiteSpace(url)) { return; }
    // Create Web Request
    HttpWebRequest myWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
    // Set GET method
    myWebRequest.Method = "GET";
    // Get a response
    HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();
    // Open a Stream to read the response
    StreamReader myWebSource = new StreamReader(myWebResponse.GetResponseStream());
    // Create a string to store the response
    string myPageSource = string.Empty;
    myPageSource= myWebSource.ReadToEnd();
    // Close the stream
    myWebResponse.Close();
    // Return the string
    return myPageSource;
}

然后以谷歌主页为例,你调用string htmlPage = getHtml("http://www.google.ca");

于 2013-08-29T15:14:12.350 回答