【发布时间】:2019-10-07 01:22:42
【问题描述】:
我正在将网站上的标题和图像收集成人类可读的格式。
我使用fs.writeFile,选项是:
- 另存为 html(在本地打开)或者,
- 通过 nodemailer 将其发送到电子邮件。
无论哪种方式,我都需要 html 中表格格式的信息。 顶行 = 标题、价格、图片(显示,而非链接)。 列 = 项目列表。
我在一部分中添加了将 JSON 转换为 html 表的部分,但它搞砸了。现在脚本没有运行。错误是文档未定义(以表格形式)。
另外,如果有任何方法可以在不维护服务器的情况下每天自动将列表发送到电子邮件,也请告诉我。
const puppeteer = require('puppeteer');
const fs = require('fs');
/* this gets the json data, all working ok */
async function newCam() {
const browser = await puppeteer.launch({ headless: false });
let page = await browser.newPage();
await page.goto('https://sg.carousell.com/search/products/?query=camera', { waitUntil: 'networkidle2' });
let results = [];
let elements = await page.$$('div.U-U');
for (let element of elements) {
let listTitle = await element.$eval('div.U-m', node => node.innerText.trim());
let listImg = await element.$eval('.U-p img', img => img.src);
let listPrice = await element.$eval('div.U-k :nth-child(1)', node => node.innerText.trim());
results.push({
'Title': listTitle,
'Img': listImg,
'Px': listPrice
});
}
await browser.close();
return results;
/* format json into table and feed into fs below */
// get header keys
var col = [];
for (var i = 0; i < results.length; i++) {
for (var key in results[i]) {
if (col.indexOf(key) === -1) { col.push(key); }
}
}
// create table
var table = document.createElement("table");
var tr = table.insertRow(-1); // insert header row.
for (var k = 0; k < col.length; k++) {
var th = document.createElement("th"); // fill header
th.innerHTML = col[k];
tr.appendChild(th);
}
// add json data as rows
for (var a = 0; a < results.length; a++) {
tr = table.insertRow(-1);
for (var f = 0; f < col.length; f++) {
var tabCell = tr.insertCell(-1);
tabCell.innerHTML = results[a][col[f]];
}
}
/* save to html on local drive with fs */
fs.writeFile('/data.html', table, (err) => {
if (err) throw err;
});
}
newCam();
【问题讨论】:
标签: javascript html node.js puppeteer