首页 新闻 会员 周边 捐助

.NET抓取土豆视频地址!!!

1
悬赏园豆:60 [已关闭问题] 关闭于 2011-12-10 22:34

请问大手们,现在如何才能实现.NET抓取土豆视频地址?我打开土豆视频的源代码看了一下,查找不到对应视频的有关信息!麻烦大手们帮忙解决,谢谢!!!

lezhan的主页 lezhan | 初学一级 | 园豆:143
提问于:2011-12-10 13:10
< >
分享
所有回答(1)
4
土豆的视频下载有以下几个特点:
1,地址动态生成,每次请求返回的地址都不一样。
2,长视频会被分割成多段短视频。
3,对视频下载有一些限制,下载地址只对与请求的浏览器相同的user-agent有效。这就意味着A用户用A浏览器获得的地址,只能用A浏览器下载,即使换个B浏览器也不行,更别说用其它工具了。
4,要解析土豆视频的下载地址,就必须找到iid。
土豆有两种形式的播放地址,一种是形如http://www.tudou.com/programs/view/QHFawBSeA4k/的单一视频播放地址,
另一种是形如http://www.tudou.com/playlist/playindex.do?lid=11694367&iid=75610812的豆单播放地址。
如果是第一种,直接查看源代码,可以找到,iid = 75629467如果是第二种,iid直接在url地址里,iid=75610812。找到iid以后,把iid拼在http://v2.tudou.com/v?vn=02&st=1%2C2&it=后面,比如http://v2.tudou.com/v?vn=02&st=1%2C2&it=75629467访问该地址,返回的是一个xml格式的文件,里面就有视频下载地址和一些视频相关信息(根据情况自己进行url_decode)。
土豆视频的解析相比于优酷的解析,因为地址没有加密,显得更直接。但是在服务器端限制了请求用户和下载用户的user-agent,需要特别注意。
LCM | 园豆:6876 (大侠五级) | 2011-12-10 13:52

嗯,谢谢LCM的解答,我先试试,有问题再向你请教!

支持(0) 反对(0) lezhan | 园豆:143 (初学一级) | 2011-12-10 14:00

@lezhan: 好的

支持(0) 反对(0) LCM | 园豆:6876 (大侠五级) | 2011-12-10 14:02

@LCM: 我用下面这样的方法抓取土豆的源代码,怎么会显示乱码呢?应该怎样抓取呢?

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 30000;
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
Encoding encoding = Encoding.GetEncoding("gbk");
StreamReader streamReader = new StreamReader(streamReceive, encoding);

支持(0) 反对(0) lezhan | 园豆:143 (初学一级) | 2011-12-10 14:44

@LCM: 呼叫LCM

支持(0) 反对(0) lezhan | 园豆:143 (初学一级) | 2011-12-10 14:54

@lezhan: 出现乱码你看下是不是编码的问题。另外,你用HttpWebRequest的话,要设置Accept和UserAgent再进行抓取。

支持(0) 反对(0) LCM | 园豆:6876 (大侠五级) | 2011-12-10 15:42

@LCM: 能否写段实例代码让我参考下呢?土豆的编码是gbk,没错喔!麻烦你了,谢谢!

支持(0) 反对(0) lezhan | 园豆:143 (初学一级) | 2011-12-10 15:46

@lezhan: 那晚上看有没有时间。现在在写一份很急用的文档。

支持(0) 反对(0) LCM | 园豆:6876 (大侠五级) | 2011-12-10 16:11

@LCM: 嗯,麻烦你了!谢谢!

支持(0) 反对(0) lezhan | 园豆:143 (初学一级) | 2011-12-10 17:08

@LCM: LCM,在么?

支持(0) 反对(0) lezhan | 园豆:143 (初学一级) | 2011-12-10 21:38

@LCM: 从土豆网抓取的源代码需要解压,所以导致了上述问题,现在已经解决了,获取网页源代码的代码如下:

    ///<summary>
    ///获取网页源代码内容(ContentEncoding是gzip格式)
    ///</summary>
    ///<param name="url"></param>
    ///<param name="encoding_type"></param>
    ///<returns></returns>
    public static string Get_WebPageCode_Info_GZip(string url, string encoding_type)
    {
        string WebPageCode = "";

        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            string ce = response.ContentEncoding;
            Stream streamReceive = response.GetResponseStream();

            Encoding encoding = Encoding.GetEncoding(encoding_type);
            if (ce.ToLower() == "gzip")
            {
                GZipStream gzip = new GZipStream(streamReceive, CompressionMode.Decompress);
                using (StreamReader reader = new StreamReader(gzip, encoding))
                {
                    WebPageCode = reader.ReadToEnd();
                    reader.Close();
                }

                response.Close();
                streamReceive.Close();
                gzip.Close();
            }
        }
        catch
        {
            WebPageCode = "";
        }

        return WebPageCode;
    }

支持(0) 反对(0) lezhan | 园豆:143 (初学一级) | 2011-12-10 22:36

@lezhan: 好的,解决了就好。

支持(0) 反对(0) LCM | 园豆:6876 (大侠五级) | 2011-12-10 23:20

@LCM: 实在麻烦你了,LCM,结贴的时候没看清楚就点了,没能给到你满分,实在不好意思!第一次在博客园提问,你是第一个答复我的,再说声谢谢!

支持(0) 反对(0) lezhan | 园豆:143 (初学一级) | 2011-12-11 00:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册