首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Node.js保存GET请求的超文本标记语言响应

Node.js保存GET请求的超文本标记语言响应
EN

Stack Overflow用户
提问于 2012-07-07 00:31:49
回答 3查看 22.6K关注 0票数 6

我显然是Javascript的新手,我不愿意承认这一点。我正在尝试使用Node.js拉取一个网页,并将其内容保存为一个变量,这样我就可以随心所欲地解析它。

在Python中,我会这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from bs4 import BeautifulSoup # for parsing
import urllib

text = urllib.urlopen("http://www.myawesomepage.com/").read()

parse_my_awesome_html(text)

我该如何在Node中做到这一点?我已经做到了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var request = require("request");
request("http://www.myawesomepage.com/", function (error, response, body) {
    /*
     Something here that lets me access the text
     outside of the closure

     This doesn't work:
     this.text = body;
    */ 
})
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-07 00:46:16

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var request = require("request");

var parseMyAwesomeHtml = function(html) {
    //Have at it
};

request("http://www.myawesomepage.com/", function (error, response, body) {
    if (!error) {
        parseMyAwesomeHtml(body);
    } else {
        console.log(error);
    }
});

编辑:正如Kishore所说,有很好的解析选项可用。如果你在windows上遇到了jsdom的python/gyp问题,也可以看看cheerio。Cheerio on github

票数 10
EN

Stack Overflow用户

发布于 2012-07-07 01:36:48

request()调用是异步的,因此该响应仅在回调中可用。你必须从它调用你的解析函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function parse_my_awesome_html(text){
    ...
}

request("http://www.myawesomepage.com/", function (error, response, body) {
    parse_my_awesome_html(body)
})

习惯于链接回调,这基本上就是javascript中任何I/O发生的方式:)

票数 3
EN

Stack Overflow用户

发布于 2012-07-07 00:42:17

如果你想解析响应,JsDom可以很好地实现这样的功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    var request = require('request'),
    jsdom = require('jsdom');

request({ uri:'http://www.myawesomepage.com/' }, function (error, response, body) {
  if (error && response.statusCode !== 200) {
    console.log('Error when contacting myawesomepage.com')
  }

  jsdom.env({
    html: body,
    scripts: [
      'http://code.jquery.com/jquery-1.5.min.js'
    ]
  }, function (err, window) {
    var $ = window.jQuery;

    // jQuery is now loaded on the jsdom window created from 'agent.body'
    console.log($('body').html());
  });
});

另外,如果您的页面加载了大量javascript/ajax内容,则可能需要考虑使用phantomjshttp://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11371310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文