使用node.js和jquery进行刮擦

时间:2013-01-24 11:36:13

标签: javascript node.js jsdom

我正在尝试按照本节教程使用node和jquery进行抓取 -

http://net.tutsplus.com/tutorials/javascript-ajax/how-to-scrape-web-pages-with-node-js-and-jquery/

其中有一些代码如下所示 -

request({uri:"http://events.sfgate.com/search?swhat=&swhen=&swhere=San+Francisco&commit=Search&st_select=any&search=true&svt=text&srss="},function(err,response,body){

jsdom.env({
html: "http://events.sfgate.com/search?swhat=&swhen=&swhere=San+Francisco&commit=Search&st_select=any&search=true&svt=text&srss=",
src:['http://code.jquery.com/jquery-1.6.min.js'],
done: function(errors,window){
    console.log("WINDOW");
    console.log(window.jQuery);
    var $ = window.$;
    //other stuff

当我控制日志窗口.Jquery或window。$时,两者都是未定义的 - 但它们不应该是因为jsdom应该将jquery嵌入页面中吗?为什么没有发生?

1 个答案:

答案 0 :(得分:0)

问题是您使用“src”参数初始化它,该参数应包含javascript文件的实际源代码数组(在本例中为jquery) - 而不是文件的URL。

如果你想要网址,你需要像这样初始化它:

jsdom.env(
  "http://nodejs.org/dist/",
  ["http://code.jquery.com/jquery.js"],
  function (errors, window) {

或者像这样:

jsdom.env({
  html: "http://news.ycombinator.com/",
  scripts: ["http://code.jquery.com/jquery.js"],
  done: function (errors, window) {

编辑:    您的代码中还有另一个错误(如果我没有弄错......) - 您首先使用 request 模块下载页面,但不要将html源代码传递给jsdom(通过传递它)您从请求获得的body您告诉jsdom再次下载该页面。如果你给jsdom页面的url作为html,那么你不需要调用 request 模块。