能不能通过把正则把
http://wz.csdn.net/my中的ID,标题,Tags,时间导出为excel。。帮忙了。谢谢流水潺潺忆往昔,
望风朝阳深呼吸。
柳叶带露正妖娆,
清晨塔草临小溪。

解决方案 »

  1.   

    突然发现他这个还是UpdatePanel分页的。。那怎么搞?。。晕死。
      

  2.   

    正则easy,导出execel又是另一回事了,估计要用第三方dll或com组件了流水哗哗来学习;
    望风而逃不停息.
    柳叶美眉真漂亮,
    清晨公汽太难挤.
      

  3.   

    话说导出,不难,只要用HttpWebRequest获取到字符串就OK了。。然后再调用过客给的正则,我突然发现只是他这个UPdatePanel分页有点麻烦。
      

  4.   

    这个主要靠正则么真不理解为什么非要用正则一次到位,为什么不用正则+String操作字符串。
      

  5.   

    嗯,正则不怎么会,导出Excel,应该很简单的。顺便接分
      

  6.   

    正则基本上这样,先试下Regex reg = new Regex(@"(?is)<table cellspacing=""0"" cellpadding=""4"" border=""0"" id=""ctl00_ctl00_ContentPlaceHolder0_ContentPlaceHolder1_bkList""[^>]*>\s*<tr[^>]*>(?:(?!</?tr).)*</tr>\s*<tr[^>]*>\s*<td[^>]*>(?:(?!</?td).)*</td>\s*<td[^>]*>(?<id>\d+)</td>\s*<td[^>]*><a[^>]*>(?<title>(?:(?!</?a).)*)</a></td>\s*<td[^>]*>(?<tags>(?:(?!</?td).)*)</td>\s*<td[^>]*>(?<time>(?:(?!</?td).)*)</td>");
    MatchCollection mc = reg.Matches(yourStr);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Groups["id"].Value + "\n";
        richTextBox2.Text += m.Groups["title"].Value + "\n";
        richTextBox2.Text += m.Groups["tags"].Value + "\n";
        richTextBox2.Text += m.Groups["time"].Value + "\n";
    }
      

  7.   

    “<div[^<]*>[^<a]*<a[^<]*>([^<])</a>[^<a]*<a[^<]([^<]*)</a>[^:]*([^<]*)[^<a]*<a[^<]*>([^<]*)</a>”
    c#中用正则匹配后取出值就可以了,详细操作就不说了,你懂的
      

  8.   

    用得着这么麻烦吗?直接把东西复制,粘到记事本里,保存。EXCEL里,数据,导入外部数据,选择刚才的文本,默认设置就行了。
      

  9.   

    哦  物品匹配的是这个网址http://wz.csdn.net/spy
    你发的那个脚本错误,不能看,我想应该差不多吧!方法都和25楼差不多,就是正则不一样
      

  10.   

     private void TestWZ()
        {
            //HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(@"http://wz.csdn.net/my");
            //request.Timeout = 20000;
            //HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            //StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);
            StreamReader reader = new StreamReader(@"E:\wz\网摘管理.htm"); 
            string strTemp = reader.ReadToEnd();
            Regex reg = new Regex(@"(?is)<table cellspacing=""0"" cellpadding=""4"" border=""0"" id=""ctl00_ctl00_ContentPlaceHolder0_ContentPlaceHolder1_bkList""[^>]*>\s*<tr[^>]*>(?:(?!</?tr).)*</tr>\s*<tr[^>]*>\s*<td[^>]*>(?:(?!</?td).)*</td>\s*<td[^>]*>(?<id>\d+)</td>\s*<td[^>]*><a[^>]*>(?<title>(?:(?!</?a).)*)</a></td>\s*<td[^>]*>(?<tags>(?:(?!</?td).)*)</td>\s*<td[^>]*>(?<time>(?:(?!</?td).)*)</td>");
            MatchCollection mc = reg.Matches(strTemp);
            foreach (Match m in mc)
            {
                richTextBox2.Text += m.Groups["id"].Value + "\n";
                richTextBox2.Text += m.Groups["title"].Value + "\n";
                richTextBox2.Text += m.Groups["tags"].Value + "\n";
                richTextBox2.Text += m.Groups["time"].Value + "\n";
            }    }
    通过读取文本,不行啊,过客。。我先来试试波导的,呵呵。
      

  11.   

    36楼的理论说得不错,道理确实是对的,但是理论也是服务于实际的。一来网摘50个一页,页数并不会太多,二来,你看看网页源代码就知道,翻页得再获取一次页面,现有的代码只是正则处理数据,没有处理到自动翻页。等把整个通用的程序做好,花的那点时间已经可以让你手动导几百次了,而且上面也说过了,网摘不维护了,做全自动的程序根本也没意义。虎妹你测试失败可能是cookie的问题,毕竟/my是要读取cookie识别用户的。你把页面保存到本地试试,先确认一下是正则有问题还是cookie的问题。
      

  12.   

    我上面的是注释的。。
    我已经测试的是本地的一个html文件。或者说,我直接复制之后粘贴到excel也许博客园也可以帮我导入也说不定呢,呵呵。
      

  13.   

    MatchCollection mc = Regex.Matches(html, @"</td><td style=""width:60px;"">(?<id>\d+)(?:[^>]*>){3}(?<title>[^<]*)</a>(?:<font[^>]+>[^<>]*</font>)?([^>]*>){2}(?<tag>[^<]*)([^>]*>){2}(?<date>[^<]*)");
                foreach (Match m in mc)
                {
                    Console.WriteLine(m.Groups["id"].Value);
                    Console.WriteLine(m.Groups["title"].Value);
                    Console.WriteLine(m.Groups["tag"].Value);
                    Console.WriteLine(m.Groups["date"].Value);
                }
      

  14.   

    本地html文件,格式会有变化,这个是通用的string html = string.Empty;
    using (StreamReader sr = new StreamReader(@"E:\网摘管理.htm"))
    {
        html = sr.ReadToEnd();
    }
    Regex reg = new Regex(@"(?is)<table[^>]*?id=(['""]?)ctl00_ctl00_ContentPlaceHolder0_ContentPlaceHolder1_bkList\1[^>]*>(\s*<tbody>)?\s*<tr[^>]*>(?:(?!</?tr).)*</tr>\s*<tr[^>]*>\s*<td[^>]*>(?:(?!</?td).)*</td>\s*<td[^>]*>(?<id>\d+)</td>\s*<td[^>]*><a[^>]*>(?<title>(?:(?!</?a).)*)</a></td>\s*<td[^>]*>(?<tags>(?:(?!</?td).)*)</td>\s*<td[^>]*>(?<time>(?:(?!</?td).)*)</td>");
    MatchCollection mc = reg.Matches(html);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Groups["id"].Value + "\n";
        richTextBox2.Text += m.Groups["title"].Value + "\n";
        richTextBox2.Text += m.Groups["tags"].Value + "\n";
       richTextBox2.Text += m.Groups["time"].Value + "\n";
    }
      

  15.   

    最近的心得,有些时候不用吧html规则限制的太死,只要匹配[^>]+>的个数,能很有效的简化正则MatchCollection mc = Regex.Matches(html, @"</td><td style=""width:60px;"">(?<id>\d+)(?:[^>]*>){2}<a href=(?<url>[^ ]+)[^>]*>(?<title>[^<]*)</a>(?:<font[^>]+>[^<>]*</font>)?([^>]*>){2}(?<tag>[^<]*)([^>]*>){2}(?<date>[^<]*)");
    foreach (Match m in mc)
    {
        Console.WriteLine(m.Groups["id"].Value);
        Console.WriteLine(m.Groups["url"].Value);
        Console.WriteLine(m.Groups["title"].Value);
        Console.WriteLine(m.Groups["tag"].Value);
        Console.WriteLine(m.Groups["date"].Value);
    }
      

  16.   


    我写正则的时候就有疑问,你居然不要链接Regex reg = new Regex(@"(?is)<table[^>]*?id=(['""]?)ctl00_ctl00_ContentPlaceHolder0_ContentPlaceHolder1_bkList\1[^>]*>(\s*<tbody>)?\s*<tr[^>]*>(?:(?!</?tr).)*</tr>\s*<tr[^>]*>\s*<td[^>]*>(?:(?!</?td).)*</td>\s*<td[^>]*>(?<id>\d+)</td>\s*<td[^>]*><a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)[^>]*>(?<title>(?:(?!</?a).)*)</a></td>\s*<td[^>]*>(?<tags>(?:(?!</?td).)*)</td>\s*<td[^>]*>(?<time>(?:(?!</?td).)*)</td>");
    MatchCollection mc = reg.Matches(html);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Groups["id"].Value + "\n";
        richTextBox2.Text += m.Groups["url"].Value + "\n";
        richTextBox2.Text += m.Groups["title"].Value + "\n";
        richTextBox2.Text += m.Groups["tags"].Value + "\n";
        richTextBox2.Text += m.Groups["time"].Value + "\n";
    }
      

  17.   

    引用 47 楼 wuyazhe 的回复:
    最近的心得,有些时候不用吧html规则限制的太死,只要匹配[^>]+>的个数,能很有效的简化正则C# codeMatchCollection mc = Regex.Matches(html, @"</td><td style=""width:60px;"">(?<id>\d+)(?:[^>]*>){2}<a href=(?<url>……
      

  18.   

    恩,谢谢各位了,我上午已经导出Excel了看了下,一共446个网摘,
      

  19.   

    我来凑个热闹,顺便支持一下,学一下。
    过客啊,这个CSDN的正则问题可少不了你的帮助啊,呵呵。
      

  20.   

    只会正则,导出excel没做过
    不过看到公司的电厂项目有这种类似的功能
      

  21.   


    /**
     * 没时间测试了。应该差不多
     * 这个方法可以把整个html输出csv,csv可以用excel打开。csv的通用性比xls强,是纯文本
     */
    String void generateCsv(String html,FileWriter fw){
       html=html.replaceAll(".*\\<tbody\\>|\\</tbody\\>.*|\\<td\\>|\\<tr\\>|\\<th\\>","").replaceAll("\\</td\\>|\\</th\\>",",")
                .replaceAll("\\</tr\\>","\r\n");
       fw.write(html);
    }