摘要:一前言一直感覺爬蟲是個(gè)挺高端的東西大數(shù)據(jù)時(shí)代爬蟲顯得尤為重要。
一、前言
一直感覺爬蟲是個(gè)挺高端的東西 大數(shù)據(jù)時(shí)代 爬蟲顯得尤為重要。經(jīng)過(guò)一番探索,終于用node實(shí)現(xiàn)了這個(gè)功能,還包括對(duì)抓取內(nèi)容的解析
二、正文1、首先搭建一個(gè)http服務(wù),這里使用我們熟悉的koa(這個(gè)是非必須的 你也可以使用純node去抓 這里主要為了方便交互、看效果或者給非技術(shù)人員使用方便)
服務(wù)端 index.js 代碼
const Koa = require("koa"); const Router = require("koa-router"); // 路由 const {greenFmt, green, purple} = require("color7log"); // log工具 const app = new Koa(); const router = new Router(); // 默認(rèn)頁(yè)面 router.get("/", async (ctx, next) => { ctx.response.type = "html"; ctx.response.body = fs.createReadStream("./index.html"); }); app.use(router.routes()) app.listen(3000); green("服務(wù)已運(yùn)行,端口:3000")
node index.js啟動(dòng)服務(wù) 即可訪問(wèn)你的頁(yè)面了 當(dāng)然項(xiàng)目下要有一個(gè) index.html 內(nèi)容請(qǐng)自己解決
2、核心代碼 使用node http模塊請(qǐng)求一個(gè) html頁(yè)面
依賴模塊,請(qǐng)自行安裝
const cheerio = require("cheerio"); const zlib = require("zlib"); const iconv = require("iconv-lite");
var http = require("http") // 引入模塊 var url = "http://kaijiang.500.com/shtml/ssq/03001.shtml" // 獲取頁(yè)面源碼,調(diào)用方法進(jìn)行解析及輸出 http.get(url, function(res) { var html = "" var arr = []; var chunks; res.on("data", function(data) { arr.push(data); }) res.on("end", function() { chunks = Buffer.concat(arr); chunks = zlib.unzipSync(chunks) // 因?yàn)轫?yè)面時(shí)gzip 所以要解壓 如果頁(yè)面時(shí)普通文本 不需要這個(gè) var body = iconv.decode(chunks, "gbk"); // 轉(zhuǎn)化為可見字符 var cheerio = require("cheerio"), // 一個(gè)用法類似jq的庫(kù) node后端使用 很方便的處理各種html模板 $ = cheerio.load(body); // 初始化dom對(duì)象 let content = $(".iSelectList a") let params = [] for (let i = 0; i < content.length; i++) { params.push($(content[i]).html()) // 獲取每一期的編碼 方便以后遍歷使用 } let nums = $(".ball_box01 li") for (let i = 0; i < nums.length; i++) { green($(nums[i]).html()) // 這里實(shí)現(xiàn)了 抓取彩票的中獎(jiǎng)號(hào)碼 } // 把各期的編碼 寫入到文件 方便使用 fs.writeFile("./data.txt", params.join(","), function(){ console.log("完成") }); }) }).on("error", function() { console.log("獲取數(shù)據(jù)出錯(cuò)!") })
看頁(yè)面是不是gzip的方法如下
完整可運(yùn)行代碼地址 node爬蟲
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/106337.html
摘要:爬蟲介紹二爬蟲的分類通用網(wǎng)絡(luò)爬蟲全網(wǎng)爬蟲爬行對(duì)象從一些種子擴(kuò)充到整個(gè),主要為門戶站點(diǎn)搜索引擎和大型服務(wù)提供商采集數(shù)據(jù)。 分分鐘教你用node.js寫個(gè)爬蟲 寫在前面 十分感謝大家的點(diǎn)贊和關(guān)注。其實(shí),這是我第一次在segmentfault上寫文章。因?yàn)槲乙彩乔岸螘r(shí)間偶然之間才開始了解和學(xué)習(xí)爬蟲,而且學(xué)習(xí)node的時(shí)間也不是很長(zhǎng)。雖然用node做過(guò)一些后端的項(xiàng)目,但其實(shí)在node和爬蟲方面...
摘要:爬蟲架構(gòu)架構(gòu)組成管理器管理待爬取的集合和已爬取的集合,傳送待爬取的給網(wǎng)頁(yè)下載器。網(wǎng)頁(yè)下載器爬取對(duì)應(yīng)的網(wǎng)頁(yè),存儲(chǔ)成字符串,傳送給網(wǎng)頁(yè)解析器。從文檔中獲取所有文字內(nèi)容正則匹配后記爬蟲基礎(chǔ)知識(shí),至此足夠,接下來(lái),在實(shí)戰(zhàn)中學(xué)習(xí)更高級(jí)的知識(shí)。 前言 Python非常適合用來(lái)開發(fā)網(wǎng)頁(yè)爬蟲,理由如下:1、抓取網(wǎng)頁(yè)本身的接口相比與其他靜態(tài)編程語(yǔ)言,如java,c#,c++,python抓取網(wǎng)頁(yè)文檔的接...
摘要:未授權(quán)的爬蟲抓取程序是危害原創(chuàng)內(nèi)容生態(tài)的一大元兇,因此要保護(hù)網(wǎng)站的內(nèi)容,首先就要考慮如何反爬蟲。反爬蟲的銀彈目前的反抓取機(jī)器人檢查手段,最可靠的還是驗(yàn)證碼技術(shù)。機(jī)器人協(xié)議除此之外,在爬蟲抓取技術(shù)領(lǐng)域還有一個(gè)白道的手段,叫做協(xié)議。 本文首發(fā)于我的個(gè)人博客,同步發(fā)布于SegmentFault專欄,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處,商業(yè)轉(zhuǎn)載請(qǐng)閱讀原文鏈接里的法律聲明。 web是一個(gè)開放的平臺(tái),這也奠定了...
摘要:可以通過(guò)傳入待刪除數(shù)組元素組成的數(shù)組進(jìn)行一次性刪除。如果后臺(tái)返回的為表示登錄的已失效,需要重新執(zhí)行。等所有的異步執(zhí)行完畢后,再執(zhí)行回調(diào)函數(shù)。回調(diào)函數(shù)的參數(shù)是每個(gè)函數(shù)返回?cái)?shù)據(jù)組成的數(shù)組。 其實(shí)在早之前,就做過(guò)立馬理財(cái)?shù)匿N售額統(tǒng)計(jì),只不過(guò)是用前端js寫的,需要在首頁(yè)的console調(diào)試面板里粘貼一段代碼執(zhí)行,點(diǎn)擊這里。主要是通過(guò)定時(shí)爬取https://www.lmlc.com/s/web/...
摘要:接著上篇爬蟲抓取豆瓣電影網(wǎng)頁(yè)數(shù)據(jù)上本篇主要描述將上次抓取的數(shù)據(jù)存入數(shù)據(jù)庫(kù)前提百度或谷歌的安裝教程,安裝本地并成功運(yùn)行推薦一款數(shù)據(jù)庫(kù)可視化管理工具。 接著上篇 Nodejs爬蟲--抓取豆瓣電影網(wǎng)頁(yè)數(shù)據(jù)(上) 本篇主要描述將上次抓取的數(shù)據(jù)存入mongodb數(shù)據(jù)庫(kù) 前提:百度或谷歌mongodb的安裝教程,安裝本地并成功運(yùn)行 推薦一款mongodb數(shù)據(jù)庫(kù)可視化管理工具:Robomongo...
閱讀 3981·2021-11-22 15:31
閱讀 2518·2021-11-18 13:20
閱讀 3098·2021-11-15 11:37
閱讀 6960·2021-09-22 15:59
閱讀 736·2021-09-13 10:27
閱讀 3767·2021-09-09 09:33
閱讀 1435·2019-08-30 15:53
閱讀 2562·2019-08-29 15:37