nodeJs爬虫 异步js问题解决

文章介绍了如何利用Electron框架加载网页,待页面的DOM准备完毕后,通过webContents执行JavaScript获取innerHTML,从而处理由JavaScript动态生成的DOM内容。之后,可以使用Cheerio对获取的HTML进行解析以提取所需数据,最后将HTML保存到文件中。
摘要由CSDN通过智能技术生成

html页面解析

使用 cheerio  对 html页面进行解析获取数据

在爬取某网页过程中翻页dom是由js动态生成出来的所以引出以下解决方案

使用 electron 框架来加载网页在加载成功后获取html代码再解析。

简略代码

const {app, BrowserWindow} = require("electron");
const fs = require("fs");

function createWindow() {
    let win = new BrowserWindow({
        width: 800,
        height: 600
    });

    win.loadURL('https://www.baidu.com/home');

    let webContents = win.webContents;
    webContents.on('did-finish-load', () => {
    });
    webContents.on('dom-ready', () => {
        //执行js代码 让页面返回 html下的DOM元素
        webContents.executeJavaScript('document.documentElement.innerHTML', true)
            .then((html: string) => {
                //将dom元素保存下来  数据爬取的话 从这里获取的html就是已经执行过js的页面了
                fs.writeFile('index.html', `<!DOCTYPE html><html lang="utf8">${html}</html>`, (err: any) => {
                    if (err) {
                        console.log(err);
                    }
                });
            })
    });
}

app.whenReady()
    .then(() => {
        createWindow();
    });

app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') app.quit()
});

app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
})

总结

直接使用 electron 当做浏览器 让页面进行 js 异步执行 然后获取dom 在进行数据解析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值