Nightmare.js网页抓取在服务器上不起作用

弗洛里安·拜尔(Florian Baierl)

对于我的(开放源代码)Node.js项目bundeszirkus.de,我需要实现一个搜索和下载URL的Web抓取工具。目前,我正在像这样使用Nightmare.js链接到完整文件

exports.scrape = function(cb) {
    _callback = cb
    _downloadedLinks = 0

    let nightmare = new Nightmare({ show: false })
    const url = 'https://www.bundestag.de/services/opendata'

    // we request nightmare to browse to the bundestag.de url and extract the whole inner html
    nightmare
        .goto(url)
        .wait('body')
        .evaluate(() => document.querySelector('body').innerHTML)
        .end()
        .then(response => {
            _downloadedLinks = 0
            let validLinks = extractLinks(response)
            _foundLinks = validLinks.length
            logger.info("[scraper] found " + validLinks.length + " valid links.")
            if(validLinks.length > 0){
                validLinks.forEach(href => {
                    downloadFileFromHref(BT_LINK + href)
                });
            } else {
                logger.info("[scraper] did not download any files.")
                _callback()
            }  
        }).catch(err => {
            logger.info("[scraper] did not download any files.")
            _callback()
        });

    // Extracting the links we need
    let extractLinks = html => {
        data = [];
        const $ = cheerio.load(html);
        $('.bt-link-dokument').each(function() {
            data.push(this.attribs.href);
         });
         return data.filter(checkDocumentLink)
    } 
}

在我的本地计算机上运行时,这非常正常。但是,在我的ubuntu服务器(AWS)上运行它时似乎出现了问题。我已经读到这是由于服务器上没有可用的图形界面这一事实造成的,因此我尝试在其上运行Xvfb

这是我的ecosystem.config.js文件。

运行时,pm2 ls我可以看到Xvfb和我的服务器都在运行:

ubuntu@ip-XXX-XX-XX-XXX:~/bundeszirkus-server/current$ pm2 ls
┌─────────────────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬─────┬────────────┬────────┬──────────┐
│ App name            │ id │ version │ mode │ pid   │ status │ restart │ uptime │ cpu │ mem        │ user   │ watching │
├─────────────────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼─────┼────────────┼────────┼──────────┤
│ Xvfb                │ 1  │ N/A     │ fork │ 26063 │ online │ 6       │ 14m    │ 0%  │ 17.5 MB    │ ubuntu │ disabled │
│ bundeszirkus-server │ 0  │ 1.0.0   │ fork │ 26057 │ online │ 6       │ 14m    │ 0%  │ 246.4 MB   │ ubuntu │ disabled │
└─────────────────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴─────┴────────────┴────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

据我所知,一切似乎都已正确设置,但是服务器的日志条目显示没有文件正在下载:

{"message":"Starting server!","level":"info","timestamp":"2020-01-11 11:56:38"}
{"message":"Starting initial scraping.","level":"info","timestamp":"2020-01-11 11:56:38"}
{"message":"[scraper] found 0 valid links.","level":"info","timestamp":"2020-01-11 11:56:42"}
{"message":"[scraper] did not download any files.","level":"info","timestamp":"2020-01-11 11:56:42"}
{"message":"Loading data.","level":"info","timestamp":"2020-01-11 11:56:42"}
{"message":"[loader] loading data ...","level":"info","timestamp":"2020-01-11 11:56:42"}

同时,在我的本地(Ubuntu)计算机上运行时,它可以工作:

{"message":"Starting server!","level":"info","timestamp":"2020-01-11 12:52:47"}
{"message":"Starting initial scraping.","level":"info","timestamp":"2020-01-11 12:52:47"}
{"message":"[scraper] found 5 valid links.","level":"info","timestamp":"2020-01-11 12:52:49"}
{"message":"[scraper] downloading file: 19138-data.xml from href: http://www.bundestag.de/resource/blob/674998/86249f57e79b8308e820d6581e7e2a95/19138-data.xml","level":"info","timestamp":"2020-01-11 12:52:49"}
{"message":"[scraper] downloading file: 19136-data.xml from href: http://www.bundestag.de/resource/blob/674328/0e9d258d50d08923fe6d6ad1381bdb3f/19136-data.xml","level":"info","timestamp":"2020-01-11 12:52:49"}
{"message":"[scraper] downloading file: 19137-data.xml from href: http://www.bundestag.de/resource/blob/674730/2bc751b619488227c9267e3cbe12c4c3/19137-data.xml","level":"info","timestamp":"2020-01-11 12:52:49"}
{"message":"[scraper] downloading file: 19135-data.xml from href: http://www.bundestag.de/resource/blob/673576/147b80c74d6d681833568cfcf36f9670/19135-data.xml","level":"info","timestamp":"2020-01-11 12:52:49"}
{"message":"[scraper] downloading file: 19134-data.xml from href: http://www.bundestag.de/resource/blob/673116/982f9d0ec845b85bddd289ede4a589fd/19134-data.xml","level":"info","timestamp":"2020-01-11 12:52:49"}
{"message":"[scraper] finished downloading  all 5 files.","level":"info","timestamp":"2020-01-11 12:52:51"}
{"message":"Loading data.","level":"info","timestamp":"2020-01-11 12:52:51"}

我在这里迷失了如何寻找缺失的部分。任何帮助是极大的赞赏!

弗洛里安·拜尔(Florian Baierl)

在执行以下操作后,它现在可以工作:

  1. xvfb像这样添加到代码中:
let xvfb = new Xvfb();
try {
  xvfb.startSync();
}
catch (e) {
  console.log(e);
}
// scraping
xvfb.stopSync();  

  1. 改变这一行:.wait('body').wait(2000)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CakePHP邮件在服务器上不起作用

来自分类Dev

Codeigniter路由在ubuntu服务器上不起作用

来自分类Dev

RequiredFieldValidator在服务器上不起作用

来自分类Dev

uiCulture在服务器上不起作用

来自分类Dev

速记数组在服务器上不起作用

来自分类Dev

selectizeInput在我的闪亮服务器上不起作用

来自分类Dev

为什么nightmare.js示例不起作用?

来自分类Dev

清除Nightmare.js(电子)中的缓存

来自分类Dev

Rotativa-ViewAspdf在服务器上不起作用

来自分类Dev

PHP chmod()在服务器上不起作用

来自分类Dev

如何在nightmare.js中运行多个评估方法?

来自分类Dev

在Nightmare.js中循环访问URL时的异步挑战

来自分类Dev

PHP PhantomJS在Web服务器上不起作用

来自分类Dev

转到:http服务器在osx上不起作用

来自分类Dev

Javascript-Nightmare.JS无限滚动动作

来自分类Dev

Nightmare.js与Docker

来自分类Dev

如何在Nightmare.js中设置电子大小?

来自分类Dev

导出到Excel在服务器上不起作用

来自分类Dev

DNS解析在18.04服务器上不起作用

来自分类Dev

DNS解析在18.04服务器上不起作用

来自分类Dev

PHP在Apache服务器上不起作用

来自分类Dev

音频上传在服务器上不起作用

来自分类Dev

使用reduce和Promises在Nightmare js中循环

来自分类Dev

在Nightmare.js中无法读取null的属性“模糊”

来自分类Dev

javascript 变量上的 Nightmare.js wait()

来自分类Dev

解释错误代码 -102 Nightmare.js 抓取

来自分类Dev

使用 nightmare.js 发出各种请求

来自分类Dev

导出/导入 Nightmare.js 函数

来自分类Dev

未定义表示 querySelector 类的变量 Nightmare.js