使用Node.js进行Web抓取

卡琳娜·巴里诺娃(Karina Barinova)

我正在尝试完成有关网络抓取的任务。在我的网页上,我获取URL,然后找到其<body>标签之间的位置然后,我要输出在我的网页上找到的内容。我了解到可以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模块结果以备后用。

纳尔·泰迪(Naor Tedgi)

我必须说,遵循您的逻辑后,最好再考虑一下。请记住,使用全局变量是一种不好的做法!

有人说

您可以按照以下较小的更改来解决逻辑问题

安装节点获取

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('/');

})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用R在imdb中进行Web抓取

来自分类Dev

使用Jsdom进行Node.js Web抓取

来自分类Dev

使用BeautifulSoup遍历URL列表进行Web抓取

来自分类Dev

如何使用Node.js抓取页面

来自分类Dev

使用lxml和请求进行Web抓取

来自分类Dev

使用BeautifulSoup进行Web抓取-无法提取表行

来自分类Dev

使用请求模块抓取Node.js

来自分类Dev

在Wikipedia上使用BeautifulSoup进行Web抓取

来自分类Dev

使用Python,BeautifulSoup进行Web抓取

来自分类Dev

使用RSelenium进行Web抓取:findElement不返回任何内容

来自分类Dev

使用BeautifulSoup到Dataframe进行Web抓取

来自分类Dev

Python-使用Scrapy进行Web抓取

来自分类Dev

使用请求进行身份验证后的Web抓取

来自分类Dev

使用Beautifulsoup和Python进行Web抓取不起作用

来自分类Dev

使用R和XML包进行Web抓取

来自分类Dev

使用Scrapy(Python)进行Web数据抓取(在线新闻评论)

来自分类Dev

使用R在imdb中进行Web抓取

来自分类Dev

使用xpathSApply在R中进行Web抓取

来自分类Dev

使用XML包在R中进行Web抓取的麻烦

来自分类Dev

需要在Rails中使用Nokogiri进行Web抓取的解释

来自分类Dev

使用R和RVest进行Web抓取

来自分类Dev

使用jsoup进行模式窗口(对话框)的Web抓取

来自分类Dev

使用Web :: Scraper从.onion网站进行抓取

来自分类Dev

使用python进行Web抓取时发生错误

来自分类Dev

使用HTML Agility Pack进行Web抓取数据

来自分类Dev

使用RVest跨多个页面进行Web抓取

来自分类Dev

使用Python脚本响应中的请求进行Web抓取

来自分类Dev

使用ThreadPoolExecutor进行错误的Web抓取

来自分类Dev

在 Node.js 中使用 Osmosis 进行抓取返回 undefined