CasperJS循环遍历表并刮取数据以获取JSON输出

时间:2017-01-17 13:38:54

标签: javascript json web-scraping casperjs

我实际上是想从CasperJs的网站上获取一些数据。数据存储在表格中。 我想在废品后得到一个合适的JSON文件。一个json: - 公司名称, - 邮件, - 网站 - 活动描述。

到目前为止,我已经能够打开页面并获取数据但不准确(邮件和网站是相同的)。所以我找到了如何精确选择我想要的每个元素。 但在这种情况下,我没有得到所有的表格信息,只有第一行......

我知道是否有人可以帮助我,告诉我在哪里寻找或如何在我的情况下制作循环?假设我不是一个专业的开发者,我正在训练自己。

这是我的代码:

var casper = require('casper').create();
var url = 'http://www.rent2016.fr/pages/exposants';
var fs = require('fs');
var length;

casper.start(url);

casper.then(function() {
    this.waitForSelector('table#myTable');
});

casper.then(function(){
    var info = this.evaluate(function(){
        var table_rows = document.querySelectorAll("tr"); //or better selector

        return Array.prototype.map.call(table_rows, function(tr){
            return {

                nom : document.querySelector(".td-width h3").textContent,
                description: document.querySelector(".td-width p").textContent,
                mail : document.querySelector("td span a").textContent,
                site : document.querySelector('td span a[href^="http"]').textContent,



            };
        });
    });

  fs.write('test_rent_stringify.json', JSON.stringify(info), 'w');
    this.echo(JSON.stringify(info, undefined, 4));

});


casper.run(function() {

});

这里,我们没有循环:JSON重复第一行信息。要获取每行信息,您必须替换

nom : document.querySelector(".td-width h3").textContent,

通过

 nom : tr.children[1].textContent,

但是在这种情况下你不能精确地定位H3,链接......你得到所有的信息。实际上我可以:

  • 循环遍历行并获取信息,但它们无法使用

  • 只有第一行信息,但表现良好

提前致谢!

1 个答案:

答案 0 :(得分:4)

为了在每个元素中获取信息,你必须使用tr.querySelector而不是document.querySelector。

以下循环适用于页面:

base64_encode($data)