【发布时间】:2020-03-11 16:42:38
【问题描述】:
所以我正在抓取一个网站,我希望它向 innerHTML 显示数据,但我无法让它工作。我正在尝试使用
document.getElementById('results').innerHTML = searchJobs('');
但它告诉我文档没有定义,抱歉,nooby 问题,但问比在同一件事上停留 45 分钟更容易。
代码如下:
function searchJobs(i) {
const url = axios.get('actualurl')
return fetch(`${url}${i}`)
.then(response => response.text())
.then(res => {
const jobs = [];
const jobsBody = [];
const $ = cheerio.load(res.data);
$('.result').each((index, element) => {
const title = $(element).children('.title').text();
const linkToJob = $(element).children('.title').children('a').attr('href')
const body = $(element).children('.summary').text();
jobs[index] = { title, linkToJob, body };
});
return jobs;
});
}
document.getElementById('results').innerHTML = searchJobs('');
module.exports = searchJobs;
我可以把爬虫放到console.log就好了。
索引路线:
const express = require('express');
const router = express.Router();
const scraper = require('../scrapers/scrapers');
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
app.js:
const express = require('express'),
path = require('path'),
cookieParser = require('cookie-parser'),
logger = require('morgan'),
puppeteer = require('puppeteer'),
axios = require('axios'),
cheerio = require('cheerio');
es6Renderer = require('express-es6-template-engine');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// view engine setup
app.engine('html', es6Renderer);
app.set('views', './views');
app.set('view engine', 'html');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
我认为问题实际上在于它基本上只是为了保持帖子简短:
<body>
<p id="results"></p>
<script src="/scrapers/scrapers.js" async defer></script>
</body>
【问题讨论】:
-
node.js 中没有
document对象。那只会存在于浏览器或类似浏览器的环境中(例如,仅在该 Cheerio 上下文中存在的 Cheerio 创建)。此外,searchJobs()返回一个您似乎没有正确使用的承诺。你能告诉我们你在哪里尝试使用searchJobs()函数并准确描述你想用它完成什么吗?您是否尝试将作业数据插入到您的 Web 服务器正在呈现的页面中?如果有,是哪条路线? -
当你说你可以让刮板到console.log就好了你的意思是登录服务器还是浏览器?
-
@ajaybee 我让它登录控制台大声笑.. 就像我可以返回工作,然后 console.log(searchJobs())
-
哪个控制台?节点应用程序可以 console.log 到服务器控制台。浏览器 JavaScript 会 console.log 到浏览器开发者控制台
-
@ajaybee 我的服务器终端我假设不在 chrome 中。
标签: javascript html node.js express