我想抓取百度歌曲TOP500页面(http://list.mp3.baidu.com/topso/mp3topsong.html?id=1?top2)中的
歌曲名 歌曲链接 歌手名 歌手链接
写正则时老是抓不全,哪位高手帮写一下呀?

解决方案 »

  1.   

    歌曲名和歌曲链接(或歌手名和歌手链接):Goup1和Group2
    (?is)<a href=\""(http://mp3[^>]*?)\""[^>]*>([^<]*)</a>从网页代码中提取。
      

  2.   

    <a.*?href="(http:\/\/mp3.baidu.com/m\?tn=baidump3&ct=.*?)".*?>(?:<b>)?(.*?)(?:</b>)?</a>我这样可以匹配到所有的歌曲和歌手名字和链接,但是不能把歌曲与歌手对应上
      

  3.   


    这个没有找到匹配,是不是应该这样的呢?(?is)<a href=\"(http://mp3[^>]*?)\"[^>]*>([^<]*)</a>
    如果是这样的话,匹配到689项,而页面中有501首歌曲,加上歌手的话,应该远不止这个数,我的<a.*?href=\"(http:\/\/mp3.baidu.com/m\?tn=baidump3&ct=.*?)\".*?>(?:<b>)?(.*?)(?:</b>)?</a>可以匹配到969个
      

  4.   

    正则:
    string pattern="(?is)<a href=\""(http://mp3[^>]*?)\""[^>]*>(?:<(?!/a).*?>)*([^<]*)(?:<(?!/a).*?>)*</a>";匹配结果:
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B5%BE%CF%E3+%D6%DC%BD%DC%C2%D7稻香
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D6%DC%BD%DC%C2%D7周杰伦
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%BB%AD%D0%C4+%D5%C5%F6%A6%D3%B1画心
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D5%C5%F6%A6%D3%B1张靓颖
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B1%B1%BE%A9%BB%B6%D3%AD%C4%E3+%C8%BA%D0%C7北京欢迎你
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C8%BA%D0%C7群星
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%CB%B5%BA%C3%B5%C4%D0%D2%B8%A3%C4%D8+%D6%DC%BD%DC%C2%D7说好的幸福呢
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D6%DC%BD%DC%C2%D7周杰伦
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B8%F8%CE%D2%D2%BB%CA%D7%B8%E8%B5%C4%CA%B1%BC%E4+%D6%DC%BD%DC%C2%D7给我一首歌的时间
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D6%DC%BD%DC%C2%D7周杰伦
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D7%F3%B1%DF+%D1%EE%D8%A9%C1%D5左边
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D1%EE%D8%A9%C1%D5杨丞琳
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D0%A1%BE%C6%CE%D1+%C1%D6%BF%A1%BD%DC%2B%B2%CC%D7%BF%E5%FB小酒窝
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%BB%A8%BA%A3+%D6%DC%BD%DC%C2%D7花海
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D6%DC%BD%DC%C2%D7周杰伦
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C0%BC%CD%A4%D0%F2+%D6%DC%BD%DC%C2%D7兰亭序
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D6%DC%BD%DC%C2%D7周杰伦
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C8%D5%B2%BB%C2%E4+%B2%CC%D2%C0%C1%D6日不落
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B2%CC%D2%C0%C1%D6蔡依林
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C9%E1%B2%BB%B5%C3+%CF%D2%D7%D3舍不得
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%CF%D2%D7%D3弦子
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C7%E0%BB%A8%B4%C9+%D6%DC%BD%DC%C2%D7青花瓷
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D6%DC%BD%DC%C2%D7周杰伦
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C0%CF%C8%CB%D3%EB%BA%A3+%BA%A3%C3%F9%CD%FE老人与海
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%BA%A3%C3%F9%CD%FE海鸣威
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B0%B2%BE%B2%C1%CB+s.h.e安静了
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=s.h.es.h.e
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%CA%B1%B9%E2%BB%FA+%D6%DC%BD%DC%C2%D7时光机
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D6%DC%BD%DC%C2%D7周杰伦
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%BB%E1%BA%F4%CE%FC%B5%C4%CD%B4+%C1%BA%BE%B2%C8%E3会呼吸的痛
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C1%BA%BE%B2%C8%E3梁静茹
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%CC%EC%C1%C1%C1%CB+s.h.e天亮了
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=s.h.es.h.e
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B0%AE+%D0%A1%BB%A2%B6%D3爱
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D0%A1%BB%A2%B6%D3小虎队
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%CE%AA%C4%E3%D0%B4%CA%AB+%CE%E2%BF%CB%C8%BA为你写诗
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%CE%E2%BF%CB%C8%BA吴克群
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B4%F3%BA%A3+%D5%C5%D3%EA%C9%FA大海
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D5%C5%D3%EA%C9%FA张雨生
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C1%FA%D5%BD%C6%EF%CA%BF+%D6%DC%BD%DC%C2%D7龙战骑士
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D6%DC%BD%DC%C2%D7周杰伦
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%CE%D2%BA%CD%C4%E3+%C1%F5%BB%B6%2B%C9%AF%C0%AD%B2%BC%C0%B3%C2%FC我和你
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%CE%C7%B1%F0+%D5%C5%D1%A7%D3%D1吻别
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D5%C5%D1%A7%D3%D1张学友
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C9%DF%CE%E8+%D6%DC%BD%DC%C2%D7蛇舞
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D6%DC%BD%DC%C2%D7周杰伦
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D4%C2%C1%C1%D6%AE%C9%CF+%B7%EF%BB%CB%B4%AB%C6%E6月亮之上
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B7%EF%BB%CB%B4%AB%C6%E6凤凰传奇
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D7%ED%B3%E0%B1%DA+%C1%D6%BF%A1%BD%DC醉赤壁
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C1%D6%BF%A1%BD%DC林俊杰
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D2%FE%D0%CE%B5%C4%B3%E1%B0%F2+%D5%C5%C9%D8%BA%AD隐形的翅膀
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D5%C5%C9%D8%BA%AD张韶涵
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D3%D2%CA%D6%B1%DF+%B9%E2%C1%BC右手边
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B9%E2%C1%BC光良
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B1%B1%BC%AB%D0%C7%B5%C4%D1%DB%C0%E1+%D5%C5%B6%B0%C1%BA北极星的眼泪
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D5%C5%B6%B0%C1%BA张栋梁
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B9%E2%BB%D4%CB%EA%D4%C2+beyond光辉岁月
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=beyondbeyond
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C8%E7%B9%FB%B0%AE%CF%C2%C8%A5+%D5%C5%F6%A6%D3%B1如果爱下去
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D5%C5%F6%A6%D3%B1张靓颖
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%CC%F0%C3%DB%C3%DB+%B5%CB%C0%F6%BE%FD甜蜜蜜
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B5%CB%C0%F6%BE%FD邓丽君
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%CE%D2%C3%C7%B5%C4%B8%E8+%CD%F5%C1%A6%BA%EA我们的歌
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%CD%F5%C1%A6%BA%EA王力宏
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%BA%A3%C0%AB%CC%EC%BF%D5+%D0%C5%C0%D6%CD%C5海阔天空
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D0%C5%C0%D6%CD%C5信乐团
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%CE%D2%C3%C7%CB%B5%BA%C3%B5%C4+%D5%C5%F6%A6%D3%B1我们说好的
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D5%C5%F6%A6%D3%B1张靓颖
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D3%D0%C3%BB%D3%D0%C8%CB%B8%E6%CB%DF%C4%E3+%B3%C2%B3%FE%C9%FA有没有人告诉你
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B3%C2%B3%FE%C9%FA陈楚生
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%BC%F2%B5%A5%B0%AE+%D6%DC%BD%DC%C2%D7简单爱
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D6%DC%BD%DC%C2%D7周杰伦
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D2%B9%C7%FA+%D6%DC%BD%DC%C2%D7夜曲
    http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D6%DC%BD%DC%C2%D7周杰伦
      

  5.   


    这次能匹配上所有的,请在一个正则中匹配歌曲、歌手(如果有的话),以及它们的链接不知道我是不是没有表达清楚,我是想在一个匹配Match中,包含有:
    歌曲名、歌曲链接(这两个肯定有)
    歌手名、歌手链接(这两个可能有)
      

  6.   

    (?is)<a href=\"(http://mp3[^>]*?)\"[^>]*>(?:<(?!/a).*?>)*([^<]*)(?:<(?!/a).*?>)*</a>.*?\(<a href=\"(http://mp3[^>]*?)\"[^>]*>(?:<(?!/a).*?>)*([^<]*)(?:<(?!/a).*?>)*</a>\)
      

  7.   

    MatchCollection mc = Regex.Matches(yourStr, @"(?<number>[1-9][0-9]?|[1-4][0-9]{2}|50[01])\.</td>\s*<td[^>]*><a\s*href=""(?<songurl>[^""]*)""[^>]*>\s*(<b>)?\s*(?<songname>[^<>]*)\s*(</b>)?\s*</a>(\s*\(\s*<a\s*href=""(?<singerurl>[^""]*)""[^>]*>(?<singer>[^<>]*)</a>)?", RegexOptions.IgnoreCase);
    foreach(Match m in mc)
    {
        //richTextBox2.Text += m.Groups["number"].Value + "\n";   //序号,主要是为了验证数量
        richTextBox2.Text += m.Groups["songurl"].Value + "\n";    //歌曲链接
        richTextBox2.Text += m.Groups["songname"].Value + "\n";   //歌曲名
        richTextBox2.Text += m.Groups["singerurl"].Value + "\n";  //歌手链接
        richTextBox2.Text += m.Groups["singer"].Value + "\n";     //歌手名
    }
    richTextBox2.Text += mc.Count + "\n";最后的mc.Count 为501
      

  8.   

    1 m.Groups[0].Value=<a href="http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B5%BE%CF%E3+%D6%DC%BD%DC%C2%D7" target=_blank>稻香</a>
    (<a href="http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D6%DC%BD%DC%C2%D7" target=_blank>周杰伦</a>)
    1 m.Groups[1].Value=http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B5%BE%CF%E3+%D6%DC%BD%DC%C2%D7
    1 m.Groups[2].Value=稻香
    1 m.Groups[3].Value=http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D6%DC%BD%DC%C2%D7
    1 m.Groups[4].Value=周杰伦
    2 m.Groups[0].Value=<a href="http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%BB%AD%D0%C4+%D5%C5%F6%A6%D3%B1" target=_blank><b>画心</b></a>
    (<a href="http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D5%C5%F6%A6%D3%B1" target=_blank>张靓颖</a>)
    2 m.Groups[1].Value=http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%BB%AD%D0%C4+%D5%C5%F6%A6%D3%B1
    2 m.Groups[2].Value=画心
    2 m.Groups[3].Value=http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D5%C5%F6%A6%D3%B1
    2 m.Groups[4].Value=张靓颖467 m.Groups[0].Value=<a href="http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C1%F7%C9%B3+%C2%ED%BF%A1%CE%B0" target=_blank>流沙</a>
    (<a href="http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C2%ED%BF%A1%CE%B0" target=_blank>马俊伟</a>)
    467 m.Groups[1].Value=http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C1%F7%C9%B3+%C2%ED%BF%A1%CE%B0
    467 m.Groups[2].Value=流沙
    467 m.Groups[3].Value=http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C2%ED%BF%A1%CE%B0
    467 m.Groups[4].Value=马俊伟
    468 m.Groups[0].Value=<a href="http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%BC%E1%C7%BF+%D5%C5%C8%D8%C8%D8" target=_blank>坚强</a>
    (<a href="http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D5%C5%C8%D8%C8%D8" target=_blank>张蓉蓉</a>)
    468 m.Groups[1].Value=http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%BC%E1%C7%BF+%D5%C5%C8%D8%C8%D8
    468 m.Groups[2].Value=坚强
    468 m.Groups[3].Value=http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%D5%C5%C8%D8%C8%D8
    468 m.Groups[4].Value=张蓉蓉
      

  9.   

    其实主要是考虑两种特殊情况,序号为2这个歌曲名<b>标签加粗这种,序号为201没有歌手这种,其它的很好处理了
      

  10.   

    结贴了,向lxcnn、min_jie学习并表示感谢!
      

  11.   


    没办法,这种需求一些匹配和条件限定是免不了的,就是算是去掉一些可能不必要的条件,也简化不了多少MatchCollection mc = Regex.Matches(yourStr, @"</td>\s*<td[^>]*><a\s*href=""(?<songurl>[^""]*)""[^>]*>\s*(<b>)?\s*(?<songname>[^<>]*)\s*(</b>)?\s*</a>(\s*\(\s*<a\s*href=""(?<singerurl>[^""]*)""[^>]*>(?<singer>[^<>]*)</a>)?", RegexOptions.IgnoreCase);
    foreach(Match m in mc)
    {
        richTextBox2.Text += m.Groups["songurl"].Value + "\n";    //歌曲链接
        richTextBox2.Text += m.Groups["songname"].Value + "\n";   //歌曲名
        richTextBox2.Text += m.Groups["singerurl"].Value + "\n";  //歌手链接
        richTextBox2.Text += m.Groups["singer"].Value + "\n";     //歌手名
    }
    richTextBox2.Text += mc.Count + "\n";上面去掉了序号,结果也是501,没有仔细看结果,楼主可以多测下,如果有不满足的,就只能等晚上回来再看下了
      

  12.   

    又发现了一些其他的情况,比如:7. 小酒窝 (林俊杰/蔡卓妍)
    271. 勇敢的幸福 (sweety/阮经天/陈宇帆) 这种有多个歌手的怎么办啊?歌手之间可能用vs、VS、/、&、+ 分隔的