nodejs 实现抓取数据
生活随笔
收集整理的這篇文章主要介紹了
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 实现抓取数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 思考问题的“六顶帽子”
- 下一篇: 如何为编程爱好者设计一款好玩的智能硬件(