我已经开始了小型抓取项目,并在一开始就停止了自己。虽然我可以做解析部分,但我在加载页面时遇到了问题。我已将代码减少到尽可能少,但仍然不适用于请求的 URL
// Required Libraries
const cheerio = require("cheerio");
const Nightmare = require("nightmare");
const scraping = (url) => {
url = "https://www.portaldrazeb.cz/drazba/144ex02170-20-62-rb3p1";
// All scraping will be done here
let nightmare = new Nightmare({ show: true });
const nightmarePromise = new Promise((resolve, reject) => {
nightmare
.goto(url)
.wait("main")
.evaluate(() => {})
.end()
.then((response) => {
var json = {
title: "",
picture: "",
price: "",
starting_price: "",
description: "",
address: "",
map: "",
customer: { name: "", email: "", phone: "" },
};
resolve(json);
});
});
return nightmarePromise.then((jsonObj) => {
nightmare = null;
return jsonObj;
});
};
module.exports = {
scraping: scraping,
};
虽然代码对于任何 URL 都可靠地工作,但它不适用于请求的 URL。仅在 30% 调用中输出正确,其余调用启动 Nightmare 浏览器,页面开始加载,然后在一秒钟内发生几次重置,浏览器关闭并显示以下错误
(节点:18468)UnhandledPromiseRejectionWarning:错误:在 EventEmitter 的 unserializeError(C:\Users\Tomas\Dropbox(个人)\Server\ScrapReality\node_modules\nightmare\lib\ipc.js:162:13)处出现导航错误。(C:\Users\Tomas\Dropbox (Personal)\Server\ScrapReality\node_modules\nightmare\lib\ipc.js:89:13) 在 Object.onceWrapper (events.js:422:26) 在 EventEmitter.emit (events .js:315:20) 在 ChildProcess。(C:\Users\Tomas\Dropbox (Personal)\Server\ScrapReality\node_modules\nightmare\lib\ipc.js:49:10) at ChildProcess.emit (events.js:315:20) at emit (internal/child_process .js:876:12) 在 processTicksAndRejections (internal/process/task_queues.js:85:21) (node:18468) UnhandledPromiseRejectionWarning: 未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志
--unhandled-rejections=strict
(参见 https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。(拒绝编号:3)