我服务器上的所有脚本都在 PHP 上,但只有使用 Node.js 才能解决一项任务。
Node.js 从数据库中获取 URL 列表,获取每个页面的内容并将其写入文件。然后 Node.js 调用 PHP 脚本,该脚本处理保存的文件。
const filesystem = require('fs');
const requestPromise = require('request-promise');
const mysql = require('mysql');
const database = mysql.createConnection({});
database.connect(function(err){
if (err){throw err}
database.query('SELECT * FROM pages', function(err, result) {
if (err){throw err}
Object.keys(result).forEach(function(key){
let page = result[key];
let url = "https://www.website.com/" + page.url
requestPromise({})
.then((html) => {
filesystem.writeFile(page.id + '.html', html, function(err){
if (err){return console.log(err)}
});
})
.catch((err) => {console.log(err)})
})//foreach
})
})//database.connect
//only after all files have been got and filled!
requestPromise({uri: 'http://127.0.0.1/parse_with_php'})
但问题是在调用本地脚本时,并非所有文件都已保存。
PS获取和保存URL后面的内容需要大部分时间,但不会从数据库中取出几行。
备注二:查询数据库也需要时间;我又使用了一个模块util。工作代码:
const util = require('util');
const mysql = require('mysql');
const filesystem = require('fs');
const requestPromise = require('request-promise');
const database = mysql.createConnection({/*options*/});
const query = util.promisify(database.query).bind(database);
(async () => {
try {
const pages = await query('SELECT * FROM pages');
//console.log(pages);
for (let key of Object.keys(pages)){
const page = pages[key]
const url = "https://www.website.com/" + page.url
const options = {
uri: url,
transform: function(body) {return body},
}
const html = await requestPromise(options)
const writeResponse = await filesystem.writeFile(page.id + '.html', html, function(err){if (err){console.log(err)}})
}
} finally {
database.end();
//console.log('all files have been saved')
requestPromise({uri: 'http://127.0.0.1/parse_with_php'})
process.exit()
}
})()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句