0

我的爬虫应用程序正在搜索一个带有查询字符串的 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包含视频缩略图画廊网格的 div 的 HTML 页面。这就是为什么下面的代码什么也不返回的原因:

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

那么为什么 Vimeo 不想给我的爬虫提供它所请求的内容呢?

4

1 回答 1

0

无需过多研究示例的细节,我怀疑您需要使用http://phantomjs.org/之类的东西来解析 Vimeo 站点上的 javascript。Phantom.js 将返回一个对象,您可以像往常一样在该对象上应用 Cheerio 方法。

于 2013-12-21T19:37:30.683 回答