nodejs爬蟲筆記(三)

來源:互聯網
上載者:User

標籤:utf-8   visitor   lte   頁面   udev   git   youtube   5.0   str   

思路:通過筆記(二)中代理的設定,已經可以對YouTube的資訊進行爬取了,這幾天想著爬取網站下的視頻資訊。通過分析YouTube,可以從訂閱號入手,先選擇幾個訂閱號,然後爬取訂閱號裡面的視頻分類,之後進入到每個分類下的視頻列表,最後在具體到每一個視頻,擷取需要的資訊。以訂閱號YouTube 電影為例。

 

一、爬取YouTube 電影裡面的視頻分類列表

開啟訂閱號,我們可以發現訂閱號下有許多視頻分類如所示,接下來可以解析該訂閱號資訊,把視頻分類的URL和名稱爬取下來。

 接下來我們通過瀏覽器點擊檢查查看網頁,分析下如何擷取分類,可以發現所有的視頻分類都在ul 下的 li 裡面,通過ul的id 我們便可以找到分類的相關資訊,因此我們可以利用cheerio模組來解析頁面,從而擷取分類資訊。

先將擷取分類資訊的相關代碼分裝成一個函數function categoryList (url , callback){},代碼如下:

var request =require(‘superagent‘);require(‘superagent-proxy‘)(request);var cheerio = require(‘cheerio‘);var debug = require(‘debug‘)(‘youtube:test:category-list‘);var proxy = ‘http://127.0.0.1:61481‘;//設定代理IP地址//要求標頭資訊var header = {‘Accept‘:‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8‘,    ‘Accept-Encoding‘:‘gzip, deflate, sdch, br‘,    ‘Accept-Language‘:‘zh-CN,zh;q=0.8,en;0.6‘,    ‘Cookie‘:‘WKcs6.resume=; _ga=GA1.2.1653214693.1476773935; _gid=GA1.2.943573022.1500212436; YSC=_X6aKoK1jMc; s_gl=1d69aac621b2f9c0a25dade722d6e24bcwIAAABVUw==; VISITOR_INFO1_LIVE=T3BczuPUIQo; PREF=hl=zh-CN&cvdm=grid&gl=US&f1=50000000&al=zh-CN&f6=1&f5=30; SID=7gR6XOImfW5PbJLOrScScD4DXf8cHCkWCkxSUFy9CbhnaFaPLBCVCElv97n_mjWgkPC_ow.; HSID=A0_bKgPkAZLJUfnTj; SSID=ASjQTON7p_q4UNgit; APISID=ZIVPX9a3vUKRa28E/A0dykxLiVJ4xDIUS_; SAPISID=t6dcqHC9pjGsE7Bi/ATm5wgRC27rqUQr5B; CONSENT=YES+CN.zh-CN+20160904-14-0; LOGIN_INFO=APUNbegwRQIhAPnMZ-qYHOSAKq0s9ltEQIUvnWNj9CHQ8J5s2JtZK15TAiBLzfS4HEUh-mWGo2Qo6XOruItGRdpPZ2v3cXLqYY7xtA:QUZKNV9BajdRR2VZQ2QyRlVDdXh3VDdKZ1AzMlFqRmg3aTBfR2pxWXFHWXlXYm1BaVVnQWk4UzZfWmZGSGcxRkNuTDBFYTk2a2tKLUEtNmtNaWZKM3hTMWNTZkgyOVlvTF9DNENwTG5XTlJudEVHQzVIeGxMbTFTdkl6YS02QlBmMmM0NVgteWI3QVNIa3c5c2ZkV1NSa3AzbWhwOHBtbzVrVTVSbTBqaWpIZ0dWNTd4UjJRSllr‘,    ‘Upgrade-insecure-requests‘:‘1‘,    ‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36‘,    ‘X-Chrome-Uma-Enabled‘:‘1‘,    ‘X-Client-Data‘:‘CJa2yQEIorbJAQjBtskBCKmdygE=‘,    ‘Connection‘: ‘keep-alive‘};//擷取訂閱號下視頻分類列表function categoryList (url , callback){debug(‘讀取訂閱號下視頻分類列表‘,url);request.get(url)//需要擷取的網址.set(‘header‘,header).proxy(proxy).end(onresponse);function onresponse(err,res){//res.setEncoding(‘utf-8‘); //防止中文亂碼if(err){return callback(err);}else{console.log(‘status:‘+res.status);//列印狀態代碼//console.log(res.text);var $ = cheerio.load(res.text);//擷取訂閱號Idvar $channelName = $(‘#c4-primary-header-contents .branded-page-header-title a‘).attr(‘href‘);var $channelId = $channelName.match(/channel\/([a-zA-Z0-9_-]+)/);var categoryList = [];$(‘#browse-items-primary .branded-page-module-title‘).each(function(){var $category = $(this).find(‘a‘).first();var item = {name : $category.text().trim(),url : ‘https://www.youtube.com‘ + $category.attr(‘href‘)};//根據URL判斷為訂閱號或者是視頻分類if(item.url.indexOf(‘list‘)!==-1){item.channelId = $channelId[1];}else{var s = item.url.match(/channel\/([a-zA-Z0-9_-]+)/);item.id = s[1];}//擷取youtube某個訂閱號下的視頻分類if(item.name!==‘‘){categoryList.push(item);}});callback(null,categoryList);}}}

接著調用categoryList函數:

categoryList(‘https://www.youtube.com/channel/UClgRkhTL3_hImCAmdLfDE4g‘,function(err,categoryList){if(err){return console.log(err);}return console.log(categoryList);});

在後台運行就得到了視頻分類資訊,這是會發現視頻分類裡面又包含了某些訂閱號,而我們只需要提取視頻分類。

去除訂閱號資訊(當然也可以添加到訂閱號列表,然後再依次讀取訂閱號下的視頻分類)

//擷取youtube某個訂閱號下的視頻分類if(item.name!==‘‘){categoryList.push(item);}替換為//擷取youtube某個訂閱號下的視頻分類if(item.categoryName!==‘‘&&item.hasOwnProperty(‘channelId‘)){categoryList.push(item);}

 這是再運行會發現訂閱號的資訊已經剔除了,接下來進入到下一層,通過視頻分類擷取視頻列表

 

二、擷取視頻列表

我們以最賣座電影為例,擷取其下面的視頻列表。點擊開啟頁面,我們會發現該分類下視頻列表全部在在裡面,我們同樣只擷取其url 以及名稱。

 

點擊檢查(ps:我用的Google瀏覽器),先查看下網頁結構,再用cheerio進行解析。檢查發現我們可以通過tbody中的tr擷取每個視頻。

 

nodejs爬蟲筆記(三)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.