国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.NET從優酷專輯中采集所有視頻及信息(VB.NET代碼)

2024-07-10 13:26:42
字體:
來源:轉載
供稿:網友
這個方法就是提取優酷的專輯ID,然后一個個ID進行循環采集網頁代碼,從中提取title標簽和VID,沒什么技術含量。=..=
采集中應用.NET中的HttpWebRequest和HttpWebResponse類,代碼分析用了正則表達式。
這個代碼效率不是很好,一個網頁的解析時間在0.5~2秒之間,不適合大量采集。也許將它轉換成JavaScript速度會快一點吧。
暫時就研究這么多,代碼直接發出來給大家共享一下。

代碼VB.NET,新建一個窗體frmMain,添加一個TextBox,一個ListBox,兩個Button,復制下面的代碼:

復制代碼 代碼如下:


Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Text.RegularExpressions
Public Class frmMain
Structure VList
Dim id As Integer
Dim title As String
Dim vid1 As String
Dim vid2 As String
Overloads Function ToString() As String
Return String.Format("{0}:<{1}> [{2}]", id, title, vid1)
End Function
End Structure
Dim myList As New List(Of VList)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' 防止重復創建變量
Dim wr1 As HttpWebRequest
Dim wr2 As HttpWebResponse
Dim ret As String
Dim reg As Match
Dim g As Group
Dim preVid As String = "" '上一個VID
Dim nowid As Integer = 0 '當前的視頻集數
Dim listUrl As String = TextBox1.Text '獲取專輯URL,如
Dim tarUrl As String = "http://v.youku.com/v_playlist/f{0}" '{0}ListID
reg = Regex.Match(listUrl, "playlist_show/id_(/d+).*/.html")
If Not reg.Success Then
MsgBox("專輯列表提取失敗!")
Exit Sub
End If
g = reg.Groups(1)
tarUrl = String.Format(tarUrl, g.Value) & "o{1}p{0}.html" '{0}集數 {1}排序
wr1 = HttpWebRequest.Create(TextBox1.Text)
wr2 = wr1.GetResponse
ret = New StreamReader(wr2.GetResponseStream, Encoding.GetEncoding(wr2.CharacterSet)).ReadToEnd
reg = Regex.Match(ret, "<title>(.+) - 專輯 - 優酷視頻</title>")
If Not reg.Success Then
MsgBox("專輯名稱提取失??!")
Else
g = reg.Groups(1)
MsgBox("專輯名:《" & g.Value & "》")
End If
Do
' 從Web流中獲取頁面文本
wr1 = HttpWebRequest.Create(String.Format(tarUrl, nowid, "0")) '按倒序方式查找視頻
wr2 = wr1.GetResponse
ret = New StreamReader(wr2.GetResponseStream, Encoding.GetEncoding(wr2.CharacterSet)).ReadToEnd
'TextBox2.Text = ret
' 創建一個臨時視頻列表變量
Dim nlist As New VList
nlist.id = nowid '獲取ID
' 獲取videoId
reg = Regex.Match(ret, "var/s+videoId/s*=/s*""(/d+)""/s*;")
If Not reg.Success Then Exit Do
g = reg.Groups(1)
' 如果VID等于上一個VID最退出
If g.Value = preVid Then Exit Do
nlist.vid1 = g.Value
' 獲取videoId2
reg = Regex.Match(ret, "var/s+videoId2/s*=/s*""((/w|=)+)""/s*;") '"var/s+videoId2/s*=/s*""(/w+)""/s*;")
If Not reg.Success Then Exit Do
g = reg.Groups(1)
nlist.vid2 = g.Value
' 獲取標題
reg = Regex.Match(ret, "<title>(.+) - (.+) - 視頻 - 優酷視頻 - 在線觀看 - </title>")
If Not reg.Success Then
nlist.title = "{名稱查找錯誤}"
Else
g = reg.Groups(2)
nlist.title = g.Value
End If
' 收尾工作
myList.Add(nlist) '添加到總列表中
preVid = nlist.vid1 '記錄最后一個VID
wr2.Close()
Me.Text = nowid & " : 處理完成!"
nowid += 1
Loop
wr2.Close()
MsgBox(nowid & " 個視頻全部采集處理完成!")
Button2_Click(sender, e)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ListBox1.Items.Clear()
For Each ls As VList In myList
ListBox1.Items.Add(String.Format("{0}:<{1}> [{2}]", ls.id, ls.title, ls.vid1))
Next
myList.Clear()
End Sub

End Class



夜聞香原創
博客:
主頁:
QQ:315514678 E-mail:clso#qq.com
歡迎技術交流!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄平县| 新安县| 桓台县| 北安市| 望城县| 九龙坡区| 寿阳县| 金堂县| 时尚| 诸暨市| 峨边| 曲周县| 新乡市| 嵩明县| 辉南县| 福清市| 盐城市| 长岭县| 峨边| 阳谷县| 建昌县| 康马县| 嵊泗县| 滦南县| 柳州市| 安达市| 洪湖市| 台东县| 潍坊市| 英吉沙县| 大同县| 泌阳县| 婺源县| 五华县| 来宾市| 汾阳市| 高唐县| 巴南区| 科技| 阜康市| 顺平县|