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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

nodejs 实现抓取数据

發布時間:2023/12/31 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nodejs 实现抓取数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

nodejs 實現抓取數據

方式一:通過nodejs自身的方法抓取數據

需要模塊:http或者https模塊 、cheerio(實現dom獲取)第三方模塊 、fs文件操作、path路徑

// 抓數據用的模塊 http、https,這兩個都是內置模塊(核心模塊)// 1.加載 https 模塊 var https=require("https");//加載cherrio模塊,可以將抓取的網頁通過jquery獲取節點的方式獲取需要的dom var cheerio=require("cheerio"); var fs=require("fs"); var path=require("path");// 2.構建options (構建請求信息:請求報文頭) var options={hostname:"www.qiushibaike.com",port:443, //https的端口是443path:"/",method:"GET",headers:{'Connection': 'keep-alive','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36','Upgrade-Insecure-Requests': '1','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6'} }// 3. 調用https的request()方法,向服務器發起請求,并且獲取服務器返回的結構(頁面代碼) var req=https.request(options,function(res){// 通過監聽 res 的 data 事件 和 end 事件獲取服務器返回的數據var buffer=[];// 監聽data事件獲取服務端返回的數據res.on('data',function(chunk){buffer.push(chunk); //將服務端獲取的buffer數據全部追加至buffer數組中})// 監聽end事件請求結束res.on("end",function(){buffer=buffer.concat(buffer); //拼接buffer數組var html=buffer.toString('utf8'); //buffer轉字符串// console.log(html); // 通過 cheerio 模塊加載 HTML 代碼 var $=cheerio.load(html);var jokes=[];// 通過選擇器選擇我們要的元素// 1. 選取所有段子的div$('div.article.block.untagged.mb15').each(function(index,ele){// 提取段子作者var author=$(ele).find("h2").text();// 提取段子正文var content=$(ele).find("div.content span").text();//把每個段子放到數組中jokes.push({author:author,content:content});}); // 把jokes寫入到文件fs.writeFile(path.join(__dirname,'jokes.json'),JSON.stringify(jokes),function(err){if(err){throw err;}console.log('ok');})}) })// 監聽本次請求是否出錯 req.on("error",function(err){console.log('出錯了:' + err); });// 如果是post請求方式需要設置請求報文體 // req.write(postData);// 結束本次請求 // 表示客戶端向服務端發送的數據都發送完了 req.end();

方式二:

方式二是通過獲取到頁面,通過正則表達式的方式,抓取需要的數據----實現原理和方式一基本一樣,只是cheerio模板的dom操作,修改為正則匹配

方式三:通過nodejs中的第三方模塊require()直接調用---最簡單

// 加載模塊 var request=require("request"); var fs=require('fs');// 1.直接調用request方法請求url,并且通過回調函數獲取返回值 request('https://www.npmjs.com/package/request',function(err,res,body){//三個參數 報錯信息,res響應,返回的頁面//直接可加載完整個頁面fs.writeFile('./a.html',body,function(err){if(err){throw err;}console.log('ok');}) })

轉載于:https://my.oschina.net/shuaihong/blog/1548128

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的nodejs 实现抓取数据的全部內容,希望文章能夠幫你解決所遇到的問題。

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