html 导入nodejs模块,nodejs cheerio模块提取html页面内容

提取问题文本的整体思路:先找到包含题目的所有元素,然后再获取这些元素的内容即可。 通过chrome的devtool(或者firefox的firebug)看出,所有的目标元素为:hr元素的所有兄弟结点。cheerio的nextAll函数满足需求,这个函数获取当前结点的所有后续的兄弟结点。程序如下:

var fs = require('fs');

var cheerio = require('cheerio');

var myHtml = fs.readFileSync("a.html");

var $ = cheerio.load(myHtml);

var t = $('html').find('hr');

var t2 = t.nextAll();

t2.each(function(i, elem) {

getContent($(this));

console.log($(this).text());

});

首先将网页读取为一个字符串,传给cheerio.load函数,返回值即是一个cheerio对象(类似于一个jquery对象)。然后使用find函数,通过selector查找hr元素。再调用 nextAll函数得到hr元素的所有兄弟结点。 最后在each函数中, 通过text函数将所有包含问题的元素的见容打印出来。

结果中有乱码,问题原因是fs模块不支持中文。通过iconv-lite先解码为中文解决。修改后代码如下:

var fs = require('fs');

var cheerio = require('cheerio');

var iconv = require('iconv-lite');

var myHtml = fs.readFileSync("a.html");

var $ = cheerio.load(iconv.decode(myHtml, 'gbk'));

var t = $('html').find('hr');

var t2 = t.nextAll();

t2.each(function(i, elem) {

getContent($(this));

console.log($(this).text());

});

最终结果如下:

Task 1: You will be given 10 minutes to read the text for the first time and then

choose an appropriate answer for each of the following questions.

1. What does the “true gratitude” mean?

A. A way of life.

B. A joyous occasion.

...

以上结果有多余的空格、换行符,输出文本看起来很散乱,但至少内容是获取正确了。再在task2-5的html文件验证一下,也获取到了正确的内容,证明方法可行。接下来我们可以集中精力解决格式散乱的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值