Chrome显示不同的HTML,然后是我的Request JS& Cheerio JS app

时间:2013-09-28 23:30:06

标签: node.js xmlhttprequest scraper cheerio

我的刮刀应用正在搜索附有查询字符串的Vimeo网址

'http://vimeo.com/search?q=angularjs'

当我在Chrome上加载该网址时,我可以看到一些元素,这些元素没有显示我的刮刀中的request()该网址。我可以使用Chrome和我的刮刀加载的HTML似乎是静态元素,如导航栏和页脚中的HTML。当我尝试访问由Vimeo处理查询字符串search?q=angularjs而生成的任何元素时,我的scraper无法访问Chrome中显示的视频库网格。所以到目前为止我的刮刀是这样的:

var request = require('request'),
  cheerio = require('cheerio'),
  searchURL = 'http://vimeo.com/search?q=angularjs';

request(searchURL, function(err, resp, body){
  if(err)
    throw err;
  $ = cheerio.load(body);
  console.log($('#site_header .join a').text());
  console.log($('#page_header h1').text());
  $('#browse_content .browse_videos li a').each(function(){
    console.log(this.attr('href'));
  });
});

用Cheerio将身体装入$后我跑

console.log($('#site_header .join a').text());

Join记录到控制台。这样可行。大。但是如果我做的话

console.log($('#page_header h1').text());

我登录到控制台的是Please Try Again,我认为这意味着无法完成查询。当我在Chrome中的页面源中看到一点HTML时,我看到了:

<header id="page_header">
    <h1>Search videos for <mark class="txt_normal">angularjs</mark></h1>
</header>

只是为了确定我跑了

console.log($('html').html());

它向我回吐了一个缺少browse_content div的HTML页面,其中包含视频缩略图库网格。这就是以下代码不返回任何内容的原因:

$('#browse_content .browse_videos li a').each(function(){
  console.log(this.attr('href'));
});

那么为什么Vimeo不想给我的刮刀提供它要求的内容?

1 个答案:

答案 0 :(得分:0)

如果不仔细查看示例的详细信息,我怀疑您需要使用类似http://phantomjs.org/的内容来解析Vimeo网站上的javascript。 Phantom.js将返回一个可以照常应用cheerio方法的对象。