node 解决爬虫爬不到前端异步数据问题
原因:爬虫能直接爬到页面渲染内容,对于渲染完毕通过浏览器JS重新请求数据创建的内容,并不能拿到。
解决:虚拟一个浏览器,等待页面数据完全加载完毕,再获取页面内容。使用到的三方库:puppeteer(谷歌浏览器官方组件)、cheerio(最流行的h5标签元素解析组件),具体代码如下,需要自取:
var cheerio = require('cheerio');
var url = 'https://xxx.com/xxx';
const puppeteer = require('puppeteer');//github传送门 官网传送门
const browser = await puppeteer.launch({args: ['--no-sandbox']});
const page = await browser.newPage();
await page.goto(url);
setTimeout(async function(){
const bodyHandle = await page.$('body');
const html = await page.evaluate(body => body.innerHTML, bodyHandle)
let $ = cheerio.load(html)
$('.content_item').each( function(i, el) {
var title = $(el).find('.item_key').text();
console.log(title);
});
await bodyHandle.dispose();
await browser.close();
},500);
centos系统使用报错解决:https://www.jianshu.com/p/ba616ca1c7c2