[英]Web scraping with Node.js
我正在嘗試在 web 抓取上完成這項任務。 在我的 web 頁面上,我使用 URL 並找到位於其<body>
標記之間的內容。 然后,我想 output 在我的 web 頁面上找到的內容。 我了解到我可以為此目的使用request
模塊。
問題是,我無法在頁面的 HTML 中顯示結果,因為我無法保存request
工作的結果(在 POST 部分)
這是我的代碼:
var request = require("request");
const express = require('express');
const app = express();
const session = require('express-session');
const path = require('path');
const bodyParser = require('body-parser');
const router = express.Router();
app.use(session({secret: 'shhhhhhh', saveUninitialized: true, resave: true}));
app.use(bodyParser.urlencoded({extended: true}));
var sess;
router.get('/', (req, res) => {
res.sendFile(path.join(__dirname + '/index.html'));
sess = req.session;
if (app.get('done') === true) {
console.log(app.get('info')); // prints "undefined"
app.set('done', false);
res.end(`
<h1>Show other sites</h1>
<form action="/" method="POST">
<input type="text" name="site" id="site" placeholder="url"><br>
<button type="submit">go</button>
<a href="/">BACK</a>
</form><br>
<hr>
<p>url: ${app.get('site')}</p>
<hr>
<div>
${app.get('info')}
</div>
`);
}
else
res.sendFile(path.join(__dirname + '/index.html'));
})
router.post('/', (req, res) => {
sess = req.session;
sess.site = req.body.site;
app.set('done', false);
if (sess.site) {
app.set('done', true);
request({
uri: `${sess.site}`,}, function(error, response, body) {
app.set('info', body); // Here I'm trying to save the scraped result
app.set('site', sess.site);
}
);
}
res.redirect('/');
})
router.get('/clear', (req, res) => {
req.session.destroy((err) => {
if (err)
return console.log(err);
res.redirect('/');
})
})
app.use('/', router);
app.listen(3000);
console.log("Running at port 3000");
請幫助我找出我做錯了什么以及如何保存Request
模塊的結果以供以后使用。
我不得不說,在遵循您的邏輯之后,最好再考慮一下。 請記住,使用全局變量是一種不好的做法!
有人說
您可以通過遵循這些小改動來解決邏輯
安裝節點獲取
npm i node-fetch
導入它
const fetch = require('node-fetch');
然后將POST端點更改為
router.post('/', async (req, res) => {
sess = req.session;
sess.site = req.body.site;
app.set('done', false);
if (sess.site) {
app.set('done', true);
await fetch(sess.site)
.then(resp => resp.text()).then(body => {
console.log(body)
app.set('info', body); //Here I'm trying to save the scrapped result
app.set('site', sess.site);
})
}
res.redirect('/');
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.