0

我正在尝试按照本教程使用节点和 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

当我控制台记录window.Jquery 或window.$ 时,两者都未定义——但它们不应该是因为jsdom 应该将jquery 嵌入到页面中吗?为什么这没有发生?

4

1 回答 1

0

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

如果你想要 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) {

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

于 2013-01-24T13:54:45.920 回答