鍍金池/ 問答/數(shù)據(jù)分析&挖掘  網(wǎng)絡安全  HTML/ node.js爬蟲 get到的數(shù)據(jù)是類似ejs的模板字符串應該怎么解決?

node.js爬蟲 get到的數(shù)據(jù)是類似ejs的模板字符串應該怎么解決?

練手的一個項目,想爬取網(wǎng)易云上面的歌手信息
代碼類似

const request = require('superagent');
const cheerio = require('cheerio');
request
    .get('http://music.163.com/#/discover/artist/cat')
    .accept('text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8')
    .query({
        id: 1001,
        initial: 65
    })

但是爬到的數(shù)據(jù)是字符串模板:

<li class="j-item" data-userId=${user.userId} data-username=${user.nickname} data-index=${user_index}><a href="#"><img src=${user.avatarUrl}>${user.nickname}</a></li>

應該怎么解決呢?謝謝~

回答
編輯回答
苦妄

你可能需要的是這個吧http://music.163.com/discover...

2017年12月23日 16:32
編輯回答
陌上花

很明顯你應該去嵌入html中的script標簽中尋找user這個對象了,而不是盯著這個模板看。當然你也可以用phantom.js把頁面加載出來再抓取。

2017年12月31日 04:01
編輯回答
枕頭人

首先,你得到${user.userId}說明不是服務器渲染的,那么數(shù)據(jù)就只能是前端通過js渲染。
然后你有兩種方式得到這些數(shù)據(jù)
一是查看http請求,包括資源文件和XHR,看看哪個請求是得到這些數(shù)據(jù)的,但這種方式不一定能拿到你想要的頁面顯示的數(shù)據(jù),因為可能有拼接拆分過濾等規(guī)則,因此可能要做代碼分析。
二是打開一個headless瀏覽器讓js執(zhí)行完成,再獲取元素顯示的值,如puppeteer等。

2017年2月8日 17:08