【場景描述】本文以西瓜視頻為例,向大家介紹如何采集直播視頻及主播信息。
【使用工具】前嗅ForeSpider數據采集系統,點擊下方即可免費下載
【使用工具】前嗅ForeSpider數據采集系統,點擊下方鏈接即可免費下載。
【入口網址】https://live.ixigua.com/category/1/109/
【采集內容】
采集西瓜視頻中的所有直播視頻及主播信息,包括主播昵稱、房間號、視頻地址、網站名稱、直播網址、直播視頻、采集時間、主播熱度。
【采集效果】
l 思路分析
配置思路概覽:
l 配置步驟
1. 新建采集任務
選擇【采集配置】,點擊任務列表右上方【+】號可新建采集任務,將采集入口地址填寫在【采集地址】框中,【任務名稱】自定義即可,點擊下一步。
選擇普通翻頁,點擊完成按鈕,即創建任務完成。
2. 直播分類鏈接獲取
①在瀏覽器中點擊不同分類的直播,將對應鏈接復制出來,觀察鏈接規律。
發現不同分類直播的鏈接規律為:
https://live.ixigua.com/category/1/分類id/
②點擊頁面右鍵【查看源文件】,在源碼中查找分類id,發現分類id在源碼的js中。
將該段源碼復制進行js格式化在線轉化,可更加清楚的看到結構。如下圖所示能夠看出,我們需要的分類名稱和id是在【sideBarData】數組的第三個對象中的【childs】數組中。
③打開腳本窗口,新建腳本。
根據剛才發現的規律,用腳本來拼分類鏈接,編寫好后點擊右上角保存。
具體如下所示:
腳本文本:
var jsonStr = DOM.GetSource().ToStr().Middle("SSR_HYDRATED_DATA\">","</script>");//返回當前html中位于【SSR_HYDRATED_DATA\">】和【</script>】之間源碼部分 jScript js;//定義一個jd var jsobj = js.RunJson(jsonStr); //執行jsonStr代碼,并返回一個json對象 var arr = jsobj.sideBarData; //定義arr為jsobj下的【sideBarData】 for(int i = 2;i<arr.size;i++){//執行【sideBarData】數組,一直到最后。 var crr = arr[i].childs;//crr為【sideBarData】第三個對象的【childs】數組 for(j in crr){//執行【childs】數組 var name = crr[j].name;//定義name為【childs】數組每個對象中的name var id = crr[j].id;//id為【childs】數組每個對象的id url u;//定義一個url u.title=id+"@"+name;//返回url的名稱為id@name u.urlname="https://live.ixigua.com/category/1/"+id+"/";//返回url為https://live.ixigua.com/category/1/id/ u.entryid=CHANN.id; u.tmplid=2;//關聯模板2 RESULT.AddLink(u);//返回以上為一條鏈接數據 } }
④采集預覽,復制任意一條分類鏈接,在瀏覽器中打開,看是否為該頁內容。
3.各主播直播鏈接
①新建模板02,在模板02下建一個鏈接抽取,具體操作如下圖所示。
②在瀏覽器上打開任意一個分類,復制價格主播直播鏈接,觀察其規律,具體如下:
③不難發現主播直播規律為:https://live.ixigua.com/主播id/
④點擊F12,查看請求,發現主播id在下圖所示請求中https://live.ixigua.com/api/feed/category/1/74?_signature=iYkdqAAgEB7evlXzywm4yYmJHbAAOmK
(測試發現鏈接后半部分不加也可以打開該請求,故腳本中省略后半部分)
請求地址規律為:https://live.ixigua.com/api/feed/category/1/分類id
⑤根據剛才發現的規律,用腳本來拼分類請求鏈接,獲取到請求中的源碼,從而拼出主播頁面鏈接。
具體如下所示:
腳本文本:
var catId = URL.title.Left("@");//定義catID為當前鏈接標題@的左側字符,即分類id var ura = "https://live.ixigua.com/api/feed/category/1/"+catId+"/ "; //拼請求 var doc = EXTRACT.OpenDoc(CHANN,ura,"",header);//打開請求 if(doc){ var cdom=doc.GetDom();//返回doc的dom操作樹對象 var str = cdom.GetSource().ToStr();//從cdom中轉化為字符串類型 var jsonstr=cdom.UnEscape(str);//對cdom中的字符串進行解碼(將其中的unicode編碼部分轉中文) jScript js;//定義一個js var jsobj = js.RunJson(jsonstr); //返回json對象 var arr = jsobj.data.liveSource; //arr為liveSource數組 if(arr.size > 0){ for(i in arr){ url u;//定義一個鏈接 u.title = URL.title.Left("@")+"@"+arr[i].watching_count+"##"+arr[i].short_id+"*"+arr[i].user_name;//返回鏈接名稱為本層鏈接標題@左側部分+@+主播watching_count即熱度+##+主播id+用戶名 u.urlname ="https://live.ixigua.com/"+arr[i].short_id+"/";//返回鏈接為https://live.ixigua.com/主播id/ u.tmplid = 3;//關聯模板3 u.entryid = CHANN.id; RESULT.AddLink(u); } } } EXTRACT.CloseDoc(doc);
⑥保存腳本后,點擊右上角【采集預覽】按鈕,雙擊任意一條鏈接,進入下一層,復制任意一條主播鏈接,在瀏覽器打開,看是否成功抽取主播鏈接。
3.抽取主播數據
①新建一個抽取模板,在其下新建一個數據抽取,具體操作如下所示:
②數據建表
點擊圖中加號,新建一個數據表,然后添加字段,各字段屬性如下圖所示:
③將新建好的數據表,關聯到模板中去,如下圖所示:
④字段抽取
字段抽取使用腳本抽取的方法,在數據抽取模板中新建一個腳本窗口。
⑤采集預覽,復制一條翻頁的鏈接,在瀏覽器中打開。
⑥鼠標單擊右鍵,查看源文件,觀察可發現直播視頻鏈接在如下圖所示位置。
將以上一段js格式化后,觀察其位置,為【roomData】節點下的【playInfo】數組的第一個數組對象的FlvUrl。且本視頻鏈接部分為unicode編碼,需要轉碼一下。
⑦根據以上觀察,編寫數據抽取腳本,具體如下圖所示:
腳本文本如下所示:
var str = DOM.GetSource().ToStr().Middle("SSR_HYDRATED_DATA\">","</script>");//從源碼中獲取有視頻鏈接部分,并轉化為字符串格式 var domstr=DOM.UnEscape(str);//將str中的字符串進行解碼(將其中的unicode編碼部分轉中文) jScript js;//定義一個js var jsobj = js.RunJson(domstr); //返回json對象 var arr = jsobj.roomData.playInfo; //找到playInfo數組 var videourl = arr[0].FlvUrl; //videourl為playInfo數組中的第一個對象的FlvUrl var hot = URL.title.Middle("@","##");//hot為本模板鏈接標題@和##中間值 var id = URL.title.Middle("##","*");//id為本模板鏈接標題##和*中間值 var nick = URL.title.Right("*");//nick為本模板鏈接標題*右邊的值 var ur= URL.urlname;//ur為當前本模板鏈接 time t;//定義一個時間t record re;//返回一個數據 re.id=id; //主播ID re.nickname=nick; //主播昵稱 re.videoURL= videourl; //視頻地址 re.platform ="西瓜直播"; //平臺 re.page_url= ur; //直播頁面網址 re.video_ex= ".flv"; //后綴 re.video = videourl; //視頻文件 re.gettime = t.ToCn(); //獲取當前網頁時間 re.hot = hot; //人氣值 RESULT.AddRec(re, TMPL.fstdoc.schemaid);//結束
⑧采集預覽
點擊右上角采集預覽,如下圖所示:
l 采集步驟
模板配置完成,采集預覽沒有問題后,可以進行數據采集。
①首先要建立采集數據表:
選擇【數據建表】,點擊【表單列表】中該模板的表單,在【關聯數據表】中選擇【創建】,表名稱自定義,這里命名為【xigua】(注意命名不能用數字和特殊符號),點擊【確定】。創建完成,勾選數據表,并點擊右上角保存按鈕。
②高級設置,在高級配置中,設置采集視頻的最大限制,如下圖所示,這樣爬蟲采集15M就會停止采集,否則爬蟲將一直采集一個直播視頻直到直播結束。設置好后,點擊右上角保存按鈕。
③選擇【數據采集】,勾選任務名稱,點擊【開始采集】,則正式開始采集。
④可以在【數據瀏覽】中,選擇數據表查看采集數據,并可以導出數據。
⑤導出的文件打開如下圖所示:
⑥導出視頻步驟及結果如下圖所示:
*本教程僅供學習交流,嚴禁用于商業用途!