日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【nodejs爬虫】使用async控制并发写一个小说爬虫

發布時間:2025/5/22 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【nodejs爬虫】使用async控制并发写一个小说爬虫 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在做一個書城項目,數據用爬蟲爬取,百度了一下找到這個網站,以擇天記這本小說為例。

爬蟲用到了幾個模塊,cheerio,superagent,async。

superagent是一個http請求模塊,詳情可參考鏈接。

cheerio是一個有著jQuery類似語法的文檔解析模塊,你可以簡單理解為nodejs中的jQuery。

async是一個異步流程控制模塊,在這里我們主要用到async的mapLimit(coll, limit, iteratee, callback)

async.mapLimit(urls, 10, function (url, callback) {fetchUrl(url, callback, id)}, function (err, results) {//TODO})

第一個參數coll是一個數組,保存了小說的章節url,第二個參數limit是控制并發數,第三個參數iteratee接受一個回調函數,該回調函數的第一個參數就是單獨某一章的url,第二個參數也是一個回調函數,這個回調函數執行后會把結果(在這里就是每一章的內容)保存到第四個參數callback的results中,results是一個數組,保存了所有章節的內容。

我們在fetchUrl獲取章節數據。

?

首先我們要根據小說的主頁url獲取所有章節的url保存到數組urls中:

superagent.get(url).charset('gbk') //該網站編碼為gbk,用到了superagent-charset.end(function (err, res) {var $ = cheerio.load(res.text); //res.text為獲取的網頁內容,通過cheerio的load方法處理后,之后就是jQuery的語法了let urls = []total = $('#list dd').lengthconsole.log(`共${$('#list dd').length}章`)$('#list dd').each(function (i, v) {if (i < chapters) {urls.push('http://www.zwdu.com' + $(v).find('a').attr('href'))}})

fetchUrl函數

function fetchUrl(url, callback, id) {superagent.get(url).charset('gbk').end(function (err, res) {let $ = cheerio.load(res.text)//obj為構建的包含章節信息的對象callback(null, obj) //將obj傳遞給第四個參數中的results }) }

完整代碼:

/*** Created by tgxh on 2017/7/4.*/ const cheerio = require('cheerio') const express = require('express') const app = express() const superagent = require('superagent') require('superagent-charset')(superagent) const async = require('async');let total = 0 //總章節數 let id = 0 //計數器 const chapters = 10 //爬取多少章 const url = 'http://www.zwdu.com/book/8634/'//去除前后空格和&nbsp;轉義字符 function trim(str) {return str.replace(/(^\s*)|(\s*$)/g, '').replace(/&nbsp;/g, '') }//將Unicode轉漢字 function reconvert(str) {str = str.replace(/(&#x)(\w{1,4});/gi, function ($0) {return String.fromCharCode(parseInt(escape($0).replace(/(%26%23x)(\w{1,4})(%3B)/g, "$2"), 16));});return str }function fetchUrl(url, callback, id) {superagent.get(url).charset('gbk').end(function (err, res) {let $ = cheerio.load(res.text)const arr = []const content = reconvert($("#content").html())//分析結構后分割htmlconst contentArr = content.split('<br><br>')contentArr.forEach(elem => {const data = trim(elem.toString())arr.push(data)})const obj = {id: id,err: 0,bookName: $('.footer_cont a').text(),title: $('.bookname h1').text(),content: arr.join('-') //由于需要保存至mysql中,不支持直接保存數組,所以將數組拼接成字符串,取出時再分割字符串即可}callback(null, obj) }) }app.get('/', function (req, response, next) {superagent.get(url).charset('gbk').end(function (err, res) {var $ = cheerio.load(res.text);let urls = []total = $('#list dd').lengthconsole.log(`共${$('#list dd').length}章`)$('#list dd').each(function (i, v) {if (i < chapters) {urls.push('http://www.zwdu.com' + $(v).find('a').attr('href'))}})async.mapLimit(urls, 10, function (url, callback) {id++fetchUrl(url, callback, id) //需要對章節編號,所以通過變量id來計數}, function (err, results) {response.send(results)})}) })app.listen(3378, function () {console.log('server listening on 3378') })

結果如下:

?

?

?

?

轉載于:https://www.cnblogs.com/tgxh/p/7124202.html

總結

以上是生活随笔為你收集整理的【nodejs爬虫】使用async控制并发写一个小说爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美福利视频在线观看 | 国产精品成人久久久久久久 | 国内av网| 精品99在线| 国产精品99久久久久久动医院 | 国产探花一区二区 | 国产精品免费av一区二区三区 | 午夜肉伦伦| 亚洲天堂影视 | 国产精品久久久一区二区 | 99re这里只有精品在线观看 | 国产尤物精品 | 巨乳中文字幕 | 可以直接观看的av | 亚洲午夜精品一区二区三区 | 黄色av网址在线观看 | 亚洲精品亚洲人成人网 | 麻豆视频一区二区三区 | 丁香婷婷社区 | 亚洲无码精品在线播放 | 在线观看免费中文字幕 | 国产熟女一区二区三区四区 | 很黄的性视频 | 成人在线观看网址 | 看片网址国产福利av中文字幕 | 国产欧美激情 | 超碰人人人人 | 禁久久精品乱码 | 国产精品自在线 | 已婚少妇美妙人妻系列 | 成年人免费黄色 | 熟妇大屁股一区二区三区视频 | 前任攻略在线观看免费完整版 | 婷婷国产 | 亚洲欧美在线不卡 | 超清av在线| 欧美日韩一区二区三区不卡 | 久久精品天天中文字幕人妻 | 精品黄色av | 亚洲精品白浆高清久久久久久 | 夜夜嗨一区二区 | 俄罗斯黄色大片 | 日韩国产在线播放 | 裸体喂奶一级裸片 | 99精品热视频 | 久久性生活视频 | 69精品人妻一区二区三区 | 成人做爰免费视频免费看 | 久久久久无码国产精品一区 | 免费日本黄色 | 老司机深夜网站 | 国产手机在线观看 | 一本无码aⅴ久久久国产 | 欧美日韩欧美 | 国产88av | 欧美脚交视频 | 四虎永久在线精品 | 欧美a级成人淫片免费看 | 在线视频免费播放 | 国产丝袜一区二区三区 | 黄色动漫免费在线观看 | 开心成人激情 | 久草网视频 | 特级丰满少妇一级aaaa爱毛片 | 国产一区在线免费 | 白白色视频在线 | 高清久久久 | 日韩性高潮 | 久久久久久电影 | 亚洲av无码国产精品永久一区 | 国产精品成人一区二区网站软件 | 有码一区 | 国产福利在线观看 | 精品人妻视频在线 | 午夜精品一区二区在线观看 | 色爽爽爽 | 男人插女人下面视频 | 色人阁五月天 | 欧美亚洲日本在线 | 日韩私人影院 | 一卡二卡精品 | 美女福利在线 | 致命弯道8在线观看免费高清完整 | 欧洲精品一区二区三区 | 韩国毛片一区二区 | 少妇人妻偷人精品一区二区 | 黄色免费在线观看视频 | 欧美激情在线狂野欧美精品 | 久久久亚洲av波多野结衣 | 国产精华一区二区三区 | 人禽l交视频在线播放 视频 | 中国性老太hd大全69 | 日韩美女在线 | 成人自拍一区 | 欧美一级二级片 | 丰满少妇在线观看bd | 18岁成年人网站 | 日韩av网址在线观看 | 国产女人18毛片水真多1 |