cheerio的小案例
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
????????這幾天,心血來潮,想學(xué)一下爬蟲,本來想使用,python的scrapy的,但是。。。但是。。。折騰了一天,都沒折騰好環(huán)境,就不折騰了,果斷投奔nodejs的cheerio去。
????? ? cheerio,就是nodeJs服務(wù)端的jquery。對(duì)于原生渣渣的我,這個(gè)實(shí)在是太方便了。立馬找了一個(gè)小案例:
var express = require('express'); var cheerio = require('cheerio'); var superagent = require('superagent'); var app = express();app.get('/', function (req, res, next) {superagent.get('https://cnodejs.org/').end(function (err, sres) {if (err) {return next(err);}var $ = cheerio.load(sres.text);var items = [];$('#content .header a').each(function(index, el) {var $element = $(el);items.push({title: $element.text()});});res.send(items);}); });app.listen(3000, function () {console.log('app is listening at port 3000'); });瀏覽器完美訪問。結(jié)果如下
[{"title": "全部"},{"title": "精華"},{"title": "分享"},{"title": "問答"},{"title": "招聘"} ],然后自己去一樣畫葫蘆抓取其他的網(wǎng)站,因?yàn)槠綍r(shí)下片都是從www.dy2018.com下的,然后就拿其開刀:
var express = require('express'); var cheerio = require('cheerio'); var superagent = require('superagent'); charset(superagent); var app = express();var url = 'http://www.dy2018.com'; app.get('/', function (req, res, next) {superagent.get(url).end(function (err, sres) {if (err) {return next(err);}var $ = cheerio.load(sres.text, {decodeEntities: false});var items = [];var url_prefix = url;$('.co_area2').eq(0).find('li a').each(function(index, el) {var $element = $(el);items.push({title: $element.text(),url: url_prefix + $element.attr('href')});});res.send(items);}); });app.listen(3000, function () {console.log('app is listening at port 3000'); });也能跑起來,但是,中文亂碼了。因?yàn)閐y2018的編碼是gb2312,再折騰了一下,才知道在使用superagent的時(shí)候,只支持utf-8的,這就導(dǎo)致了悲劇的發(fā)生。解決方案,有很多我采取使用superagent-charset的方案。代碼如下:
var express = require('express'); var cheerio = require('cheerio'); var charset = require('superagent-charset'); var superagent = require('superagent'); charset(superagent); var app = express();var url = 'http://www.dy2018.com'; app.get('/', function (req, res, next) {superagent.get(url).charset('gb2312').end(function (err, sres) {if (err) {return next(err);}var $ = cheerio.load(sres.text, {decodeEntities: false});var items = [];var url_prefix = url;$('.co_area2').eq(0).find('li a').each(function(index, el) {var $element = $(el);items.push({title: $element.text(),url: url_prefix + $element.attr('href')});});res.send(items);}); });app.listen(3000, function () {console.log('app is listening at port 3000'); });結(jié)果:
[{"title": "2015年賈樟柯導(dǎo)演劇情片《山河故人》BD國語中字","url": "http://www.dy2018.com/i/96180.html"},{"title": "2016年美國6.4分喜劇家庭片《歡鬧父子情/確認(rèn)》BD中英雙字","url": "http://www.dy2018.com/i/96918.html"},{"title": "2016年美國7.6分喜劇運(yùn)動(dòng)片《飛鷹艾迪/飛躍奇跡》BD中英雙字","url": "http://www.dy2018.com/i/96915.html"},{"title": "2016年美國6分動(dòng)作犯罪片《白宮淪陷2:倫敦淪陷》HD國語中字","url": "http://www.dy2018.com/i/96914.html"},{"title": "2015年韓國6.1分古裝愛情片《朝鮮魔術(shù)師》BD韓語中字","url": "http://www.dy2018.com/i/96913.html"},{"title": "2016年美國7.5分動(dòng)作戰(zhàn)爭片《危機(jī)13小時(shí)》BD中英雙字","url": "http://www.dy2018.com/i/96912.html"},{"title": "2016年鄧超羅志祥喜劇奇幻片《美人魚》BD國粵雙語中字","url": "http://www.dy2018.com/i/96758.html"},{"title": "2016年陳曉秦嵐劇情愛情片《睡在我上鋪的兄弟》HD中英雙字","url": "http://www.dy2018.com/i/96909.html"},{"title": "2016年白敬亭郭姝彤愛情片《誰的青春不迷茫》HD中英雙字","url": "http://www.dy2018.com/i/96907.html"},{"title": "2016年印度恐怖片《亡界之門/鬼門開》BD中英雙字","url": "http://www.dy2018.com/i/96906.html"},{"title": "2016年英國6.6分喜劇動(dòng)作片《王牌賤諜:格林斯比》BD中英雙字","url": "http://www.dy2018.com/i/96905.html"},{"title": "2016年迪士尼高分冒險(xiǎn)動(dòng)畫片《瘋狂動(dòng)物城》BD國英雙語雙字","url": "http://www.dy2018.com/i/96878.html"},{"title": "2016年美國6.2分懸疑犯罪片《曼哈頓夜曲》BD中英雙字","url": "http://www.dy2018.com/i/96900.html"},{"title": "2016年張翰趙麗穎喜劇愛情片《女漢子真愛公式》HD中英雙字","url": "http://www.dy2018.com/i/96898.html"},{"title": "2016年英國科幻恐怖片《殺戮指令/殺戮命令》BD中英雙字","url": "http://www.dy2018.com/i/96897.html"} ]完美,關(guān)鍵代碼是使用superagent-charset,它的github源碼地址https://github.com/magicdawn/superagent-charset
還有一個(gè)地方就是var $ = cheerio.load(sres.text, {decodeEntities: false}); cheerio加載的時(shí)候,要設(shè)置{decodeEntities: false}。
本文的demo地址:https://git.oschina.net/xbuding/nodejs_cheerio.git
app2.js是抓取電影天堂的demo
轉(zhuǎn)載于:https://my.oschina.net/xbuding/blog/684875
總結(jié)
以上是生活随笔為你收集整理的cheerio的小案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逻辑卷管理
- 下一篇: Html基础知识详解