我的刮板应用程序正在搜索一个Vimeo URL,它附带了一个查询字符串,它是
'http://vimeo.com/search?q=angularjs'
当我在Chrome上加载这个URL时,我可以看到一些元素没有显示在我的request()中,这个URL来自我的刮板。我可以用Chrome和刮板加载的HTML似乎是静态元素,比如在导航栏和页脚中找到的HTML。当我试图访问Vimeo处理查询字符串search?q=angularjs所生成的任何元素时,我的刮板将无法访问显示在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页面,该页面缺少包含视频缩略图库网格的HTML。这就是为什么以下代码不返回任何内容的原因:
$('#browse_content .browse_videos li a').each(function(){
console.log(this.attr('href'));
});所以为什么Vimeo不想给我的刮刀它请求的内容?
发布于 2013-12-21 19:37:30
在不深入了解示例细节的情况下,我怀疑您需要使用类似http://phantomjs.org/的方法来解析Vimeo站点上的javascript。Phantom.js将返回一个对象,您可以像往常一样在该对象上应用cheerio方法。
https://stackoverflow.com/questions/19072793
复制相似问题