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 在进行数据解析