写点什么

【从零开始学爬虫】采集西瓜直播视频

发布于: 2021 年 07 月 21 日
【从零开始学爬虫】采集西瓜直播视频

l 采集网站

【场景描述】本文以西瓜视频为例,向大家介绍如何采集直播视频及主播信息。

【使用工具】前嗅 ForeSpider 数据采集系统,点击下方即可免费下载

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;//定义一个jdvar 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为当前链接标题@的左侧字符,即分类idvar 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;//定义一个jsvar jsobj = js.RunJson(domstr); //返回json对象var arr = jsobj.roomData.playInfo;  //找到playInfo数组var videourl = arr[0].FlvUrl; //videourl为playInfo数组中的第一个对象的FlvUrlvar hot = URL.title.Middle("@","##");//hot为本模板链接标题@和##中间值var id = URL.title.Middle("##","*");//id为本模板链接标题##和*中间值var nick = URL.title.Right("*");//nick为本模板链接标题*右边的值var ur= URL.urlname;//ur为当前本模板链接time t;//定义一个时间trecord re;//返回一个数据re.id=id; //主播IDre.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 就会停止采集,否则爬虫将一直采集一个直播视频直到直播结束。设置好后,点击右上角保存按钮。



③选择【数据采集】,勾选任务名称,点击【开始采集】,则正式开始采集。

 


④可以在【数据浏览】中,选择数据表查看采集数据,并可以导出数据。

 


⑤导出的文件打开如下图所示:

 


⑥导出视频步骤及结果如下图所示:

 


*本教程仅供学习交流,严禁用于商业用途!

发布于: 2021 年 07 月 21 日阅读数: 7
用户头像

还未添加个人签名 2020.11.06 加入

前嗅大数据,企业级大数据供应商。www.forenose.com

评论

发布
暂无评论
【从零开始学爬虫】采集西瓜直播视频