我的刮刀应用正在搜索附有查询字符串的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不想给我的刮刀提供它要求的内容?
答案 0 :(得分:0)
如果不仔细查看示例的详细信息,我怀疑您需要使用类似http://phantomjs.org/的内容来解析Vimeo网站上的javascript。 Phantom.js将返回一个可以照常应用cheerio方法的对象。