用cheerio报废的问题

Bab*_*bar 2 screen-scraping node.js cheerio

我一直试图抓住10个网站,我们正在建立一个网站,链接到原始网站,在node.js上使用cheerio,我们得到的问题是有些网站已经改变,现在使用ajax调用来带来他们的数据,我的问题是我们如何获取该信息,例如首先触发按钮点击然后获取DOM.

其次:相同的dom结构不是获取所有数据,它是检索一个页面的信息,而不是在具有相同DOM结构的另一个页面上获取元素.任何帮助,将不胜感激.

感谢致敬. 编辑1:相关代码

$('#ProductContent').filter(function(){
                            var price = undefined;
                            var ukulele = false;
                            var model = $(this).find('.ProductSubtitle').text().replace(/\n\s*/g,"");
                            if(model.indexOf(/m/i) != 0){
                                var description = $(this).find('.RomanceCopy').text().replace(/\n\s*|\r/g,"");
                                .
                                .code removed for brevity and the variables present here are populated
                                .
                                //this children is populated only for one page.
                                children =  $(this).find('.SpecsColumn .SpecsTable table tbody').children('tr');
                                console.log('children: '+children.length)
                                console.log(guitar_url);
                                children.each(function(){
                                    var key = $(this).children('td').first().text();
                                    var value = $(this).children('td').last().text();
                                    specs[key] = value;
                                    console.log(specs); 
                                });
Run Code Online (Sandbox Code Playgroud)

编辑2:Cherios初始化

request(guitar_url,function(error,response,html){
                    if(!error){
                        var $ = cheerio.load(html);
                        $("#content #right-content").filter(function(){..children and other variables are populated inside here....})
                    }
 })
Run Code Online (Sandbox Code Playgroud)

ala*_*rev 5

总结您收到的所有评论:

Cheerio是受jQuery启发的简约DOM读者.它的设计专注于读取数据,而不是浏览器模拟器,您可以单击按钮.

另一种方法是使用PhantomJSCasperJS等无头浏览器.

这两个在Node.js范围之外,您可能很难将Node.js中的数据来回传输到无头浏览器.

如果您保持在Node.js环境中很重要,那么您可以使用JSDOM.

所有这些都比Cheerio 更复杂,但是如果你想操纵DOM,在DOM上执行JavaScript等等......那么这是你最好的选择.