CasperJS 将数据传回 PHP

问题描述 投票:0回答:2
PHP 使用

exec()

 命令调用 
CasperJS。 CasperJS 完成检索网页部分内容等工作后,如何将检索到的数据返回给 PHP?

php web-scraping phantomjs casperjs
2个回答
26
投票

我认为将数据从 CasperJS 传输到另一种语言(例如 PHP)的最佳方法是将 CasperJS 脚本作为服务运行。因为 CasperJS 是在 PhantomJS 上编写的,所以 CasperJS 可以使用 PhantomJS 的嵌入式 Web 服务器模块,称为 Mongoose。

有关嵌入式 Web 服务器如何工作的信息,请参阅此处

这里有一个关于 CasperJS 脚本如何启动 Web 服务器的示例。

//define ip and port to web service
var ip_server = '127.0.0.1:8585';

//includes web server modules
var server = require('webserver').create();

//start web server
var service = server.listen(ip_server, function(request, response) {

    var links = [];
    var casper = require('casper').create();

    function getLinks() {
        var links = document.querySelectorAll('h3.r a');
        return Array.prototype.map.call(links, function(e) {
            return e.getAttribute('href')
        });
    }

    casper.start('http://google.fr/', function() {
        // search for 'casperjs' from google form
        this.fill('form[action="/search"]', { q: 'casperjs' }, true);
    });

    casper.then(function() {
        // aggregate results for the 'casperjs' search
        links = this.evaluate(getLinks);
        // now search for 'phantomjs' by filling the form again
        this.fill('form[action="/search"]', { q: 'phantomjs' }, true);
    });

    casper.then(function() {
        // aggregate results for the 'phantomjs' search
        links = links.concat(this.evaluate(getLinks));
    });

    //
    casper.run(function() {
            response.statusCode = 200;
            //sends results as JSON object
            response.write(JSON.stringify(links, null, null));
            response.close();              
    });

});
console.log('Server running at http://' + ip_server+'/');

9
投票

您可以将输出从 stdout 重定向到数组。

this页面上它说你可以这样做:

string exec ( string $command [, array &$output [, int &$return_var ]] )

接着说:

如果存在输出参数,则指定的数组将填充命令输出的每一行。

所以基本上你可以执行 exec('casperjs command here, $array_here);

© www.soinside.com 2019 - 2024. All rights reserved.