我正在尝试按照本节教程使用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嵌入页面中吗?为什么没有发生?
答案 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 模块。