某东的商品价格是【通过一个类似函数的东西(是这样的吗?)】【即时得到的(是AJAX吗?)】,所以用HttpWebRequest得到的Html源码里没有价格:
比如说:
<div class="dt">京&nbsp;东&nbsp;价:</div>
<div class="dd">
<strong class="p-price"  id="jd-price"></strong>但是等到网页加载完毕,通过【查看选中部分源代码】却可以得到价格:
比如说:就可以得到:
<div class="dt">京&nbsp;东&nbsp;价:</div>
<div class="dd">
<strong class="p-price" id="jd-price">¥2488.00</strong>这【2488.00】就是我梦寐以求的东西哦,球大神帮助。
因为我只精通了C++,C#和web就上周刚开始接触,所以解答的时候最好上源代码和注释,
或者说出相关技术文献链接,
50分,谢谢了!

解决方案 »

  1.   

    用webbrowser加载,你就能获取。
      

  2.   

    楼主使用的方法是文本形式的,是静态的,但现在大多数网页都用JS进行处理的,随时可以改变内容,建议楼主学习一下 DOM 操作,别有洞天,好好努力。
      

  3.   

    等待页面加载结束,然后通过遍历HtmlElement找出价格即可,例子网上一大片,都很成熟了,十分简单
      

  4.   

    怎么用?随便试了一下,表示阵亡。private void GetPriceT(string url)
    {
        WebBrowser wb = new WebBrowser();
        wb.Navigate(url);
        using (TextWriter tw = new StreamWriter(@"f:\Test.txt"))
            tw.Write(wb.DocumentText);
    }GetPriceT("http://item.jd.com/539349.html");
      

  5.   

    C#怎么用DOM操作,能给个例子吗?发个链接就行,我自己去看。
      

  6.   

    C#怎么用DOM操作,能给个例子吗?发个链接就行,我自己去看。
    这可是一言难尽啊,楼主先要学会在网页中用JS获取网页的任意内容,然后在 C# 中放一个 WebBrowser ,获取 IHTMLDocument2 对象后,用类似的方法获取,只是全部改成 C# 了。
      

  7.   

    既然DOM和页面都已加载完了。可以用js去获取数据,当然正则也可以抓取
      

  8.   

    给链接可否?http://msdn.microsoft.com/zh-cn/library/vstudio/system.windows.forms.htmlelementcollection.aspx
      

  9.   

    using System;
    using System.Threading;
    using System.Windows.Forms;namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                wb.DocumentCompleted += wb_DocumentCompleted;
            }
            WebBrowser wb = new WebBrowser();
            private void button1_Click(object sender, EventArgs e)
            {
                wb.Navigate(textBox1.Text);
            }        void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                Action<object> act = delegate
                                 {
                                     Thread.Sleep(500);
                                     Invoke(new Action(() =>
                                                           {
                                                               foreach (HtmlElement element in wb.Document.All)
                                                               {
                                                                   if (element.Id == "jd-price")
                                                                   {
                                                                       listBox1.Items.Clear();
                                                                       listBox1.Items.Add(element.InnerText);
                                                                   }
                                                               }
                                                           }));
                                 };
                ThreadPool.QueueUserWorkItem(new WaitCallback(act));
            }
        }
    }
      

  10.   


    谢谢了,50分给你了,
    根据你代码我也编写出了我的测试代码,的确成功了,但是还有一些疑问,
    都能解答的话再给你另外的50分可好?Q1.下面的代码能稍微注释一下吗,语法理解不能:
    private void wb_getprice(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                Action<object> act = delegate
                {
                    Thread.Sleep(500);
                    Invoke(new Action(() =>
                    {
                        foreach (HtmlElement element in wb.Document.All)
                        {
                            if(element.Id == "jd-price")
                                //using (TextWriter tw = new StreamWriter(@"f:\Price.txt"))
                                    //tw.Write(element.InnerText);
                        }
                    }));
                };
                ThreadPool.QueueUserWorkItem(new WaitCallback(act));
            }
                };Q2.问题是:这东西好烦啊,能用类似异常的东西干掉吗?
      

  11.   

    //定义一个方法
                Action<object> act = delegate
                {
                    Thread.Sleep(500);  //使方法所处的线程挂起500毫秒(给webbrowser时间处理document)
                    //在窗口所处的线程执行委托
                    Invoke(new Action(() =>
                    {
                        //遍历webbrowser的文档的所有元素
                        foreach (HtmlElement element in wb.Document.All)
                        {
                            //如果元素名为"jd-price"就将其包含的文本加入列表框控件
                            if (element.Id == "jd-price")
                            {
                                listBox1.Items.Clear();
                                listBox1.Items.Add(element.InnerText);
                            }
                        }
                    }));
                };
                //从线程池中取出一条线程执行上面定义的方法
                ThreadPool.QueueUserWorkItem(new WaitCallback(act));
    脚本错误的问题参考:
    http://www.cnblogs.com/Ihaveadream/archive/2008/04/25/1171349.html