繁体   English   中英

在CasperJS中等效于app.get()

[英]Express app.get() equivalent in CasperJS

我构建了一个简单的Web刮板,该刮板可刮擦一个网站并输出访问此URL时所需的数据localhost:3434/page 我使用express app.get()方法实现了此功能。

我有以下问题,

1)我想知道是否有一种方法可以在CasperJS中实现此功能。

2)在访问URL- localhost:8081/scrape之后,是否有办法使此代码开始抓取。 我认为我没有正确创建端点,因为它甚至在访问URL之前就开始抓取

3)当我访问该URL时,出现错误提示该URL不可用。

我认为,如果可以在CasperJS中将端点正确设置为localhost:3434/page ,那么所有这些问题都将得到解决。 我不需要结果显示在页面上。 访问该URL时,仅需要它即可开始抓取。

以下是我为刮取网站并在Casper中创建服务器而开发的代码。

var server = require('webserver').create();

var service = server.listen(3434, function(request, response) {
    var casper = require('casper').create({
    logLevel:"verbose",
    debug:true
    });

    var links;
    var name;
    var paragraph;
    var firstName;
    var expression = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;
    var regex = new RegExp(expression);

    casper.start('http://www.home.com/professionals/c/oho,-TN');

    casper.then(function getLinks(){
         links = this.evaluate(function(){
            var links = document.getElementsByClassName('pro-title');
            links = Array.prototype.map.call(links,function(link){
                return link.getAttribute('href');
            });
            return links;
        });
    });

    casper.then(function(){
        this.each(links,function(self,link){
          if (link.match(regex)) {
            self.thenOpen(link,function(a){
              var firstName = this.fetchText('div.info-list-text');
              this.echo(firstName);
            });
          }
        });
    });

    casper.run(function() {
            response.statusCode = 200;
            response.write(firstName);
            response.close();              
         });
    });

webserver在您CasperJS脚本中使用是PhantomJS的Web服务器模块 ,这是“旨在便于PhantomJS脚本和外部世界之间的沟通,因此推荐用作一般生产服务器”

您不应该在PhantomJS中构建Web服务器。 检出这些节点-幻象桥,这些桥将使您可以从常规NodeJS Web服务器使用Phantom:

SpookyJS是特别适用于CasperJS的驱动程序,而其他则仅适用于PhantomJS。

尽管CasperJS允许从PhantomJS内部加载,但是您至少可以在Phridge中使用它(不确定其他人),因为它具有.run函数,可以直接在PhantomJS环境中运行任何函数:

casperPath = path.join(require.resolve('casperjs/bin/bootstrap'), '/../..');
phantom.run(casperPath, function(casperPath) {
    phantom.casperPath = casperPath;
    phantom.injectJs(casperPath + '/bin/bootstrap.js');
    casper = require('casper').create();
    ...

除了使用PhantomJS的工具外,还有其他工具:

ZombieJS使用本机NodeJS库,这使其在NodeJS应用中使用最快,最自然。 尽管这意味着更多用于测试目的,并且可能无法在其他刮板可能的所有站点上正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM