前言:
在使用cheerio进行爬虫的时候,发现一个很严重的问题,就是我用了中文乱码的解决方法,但是无效,所以就追根溯源,了解了下这里相关的内容。
出现乱码的html
出现乱码的原因:
Node不支持gb2312
那我们应该怎么处理这种呢?难道只能放弃这种格式的网页了?不不不,这种思维要不得,身为程序员,就应该打破砂锅问到底,有困难,克服困难,奥里给,继续往下把!
最终实现效果:
加强版使用操作步骤:
1、引入相关插件
npm install cheerio --save
除了必须的 cheerio 外,还需要引入 superagent 与 superagent-charset
npm install superagent-charset --save
2、在service下新建一个 spider.js 文件
/*
* @FilePath:\app\service\spider.js
*/
'use strict';
const Service = require('egg').Service;
class SpiderService extends Service {
async spider(url) {
const result = await this.ctx.curl(url);
return result;
}
}
module.exports = SpiderService;
3、在 controller/home.js 中来写我们的具体爬虫方法
1、引入 我们的插件
// 解决 gb2312格式中文乱码
const request = require('superagent')
require('superagent-charset')(request)
const cheerio = require('cheerio')
2、写具体方法
async getHtmlRender(ctx) {
var url = 'https://www.bxwx666.org/txt/57763/';
// 解决 gb2312格式中文乱码
const requestPromise = new Promise((resolve, reject) => {
request.get(url)
.buffer(true)
.charset('gbk')
.end((err, html) => {
const htmlText = html.text
const $ = cheerio.load(htmlText,{ decodeEntities: false })
const imgListData = [];
$('a').each(function () {
let url = $(this).attr('href')
let text = $(this).text()
console.log(url);
console.log(text);
imgListData.push(url);
})
/**
* 处理,保存数据等操作
*/
return resolve({
imgListData,
$,
})
})
})
const result = await requestPromise;
result['$']('a').each(function () {
console.log(1111111111);
})
ctx.body = result
}
4、配置路由 router.local.js
/**
* 路由配置
* @param app
*/
module.exports = app => {
const { router, controller, middleware } = app;
//爬虫
router.get("/getPictureData", controller.home.getPictureData);
router.get("/getHtmlRender", controller.home.getHtmlRender);
router.get("/getHtmlRender2", controller.home.getHtmlRender2);
}
更多相关资料:
node爬虫遇到的各种问题(cheerio+puppeteer) - SegmentFault 思否环境:node@8.12.0,cheerio@0.22.0网站使用的gb2312编码,开始用http直接访问网页,cheerio加载后console出来中文全部乱码:https://segmentfault.com/a/1190000039764571node爬取新闻网并存入数据库_某段的博客-CSDN博客node爬取新闻网并存入数据库本来想用python写的,但是pycharm的导入库有点小问题,发现node.js也可以操作,经过一上午的研究和请教一些大佬,终于成功了,这里附上我执行成功的代码给各位参考,当然哪里可以优化也请指出const request = require('request')const cheerio = require('cheerio')const mysql=require('mysql')//导入库const db=mysql.createPool({host:'l
https://blog.csdn.net/weixin_45086831/article/details/109740344