国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > JS > 正文

node.js 抓取代理ip實(shí)例代碼

2024-05-06 16:36:53
字體:
供稿:網(wǎng)友

node.js實(shí)現(xiàn)抓取代理ip

主要文件:index.js

/** 支持:node.js v7.9.0*/const cheerio=require('cheerio');const fetch =require('node-fetch');const Promise=require('bluebird');let mongoose=require('mongoose');Promise.promisifyAll(mongoose);let Schema=mongoose.Schema;mongoose.connect('mongodb://localhost:27017/ipproxypool');let IPpool=new Schema({  ip:{type:String,unique:true}})let Ipproxy=mongoose.model('IP',IPpool);function fetchUrl(url){  fetch(url,{    method:'get',    headers:{    }  })  .then(res=>res.text())  .then(body=>{    let $=cheerio.load(body);    let length=$('#list table tbody').find('tr').length;    for (let i=0;i<length;i++){    let ipaddress= $('#list table tbody').find('tr').eq(i).find('td').eq(0).text() ;    let port = $('#list table tbody').find('tr').eq(i).find('td').eq(1).text();    console.log(`IP:${ipaddress}:${port}`);    let ip=`${ipaddress}:${port}`    let ippool=new Ipproxy({      ip:ip    })    ippool.save();    }  })}var sleep = function (time) {  return new Promise(function (resolve, reject) {    setTimeout(function () {      resolve('ok');    }, time);  })};const pageNumber=10;var start = async function(){  for(let j=1;j<pageNumber;j++){     console.log(`當(dāng)前是第${j}次等待..`);    fetchUrl(`http://www.kuaidaili.com/free/inha/${j}/`);    await sleep(1500);  }}start();

包支持 : package.json

{ "name": "demo-4-ipproxypool", "version": "1.0.0", "description": "", "main": "index.js", "scripts": {  "test": "echo /"Error: no test specified/" && exit 1" }, "author": "false-l", "license": "", "devDependencies": {  "babel-preset-es2015": "^6.24.1",  "babel-preset-react": "^6.24.1",  "babel-preset-stage-3": "^6.24.1" }, "dependencies": {  "babel-core": "^6.24.1",  "bluebird": "^3.5.0",  "cheerio": "^0.22.0",  "koa": "^2.2.0",  "koa-router": "^7.1.1",  "mongoose": "^4.9.6",  "node-fetch": "^1.6.3" }}

本地需要安裝mongodb數(shù)據(jù)庫(kù),用于存儲(chǔ)抓取到的ip,目前還未實(shí)現(xiàn)ip驗(yàn)證。寫這個(gè)主要是處于好奇。

上面的代碼就可以實(shí)現(xiàn)抓取ip代理網(wǎng)站的ip并存到mongodb數(shù)據(jù)庫(kù)中。

下面在放出一個(gè)基于koa2的api接口的簡(jiǎn)易服務(wù)器實(shí)現(xiàn)

server

 

const Promise=require('bluebird');let mongoose=require('mongoose');const koa=require('koa');const app=new koa();var router = require('koa-router')();Promise.promisifyAll(mongoose);let Schema=mongoose.Schema;mongoose.connect('mongodb://localhost:27017/ipproxypool');let IPpool=new Schema({  ip:{type:String,unique:true}})let Ipproxy=mongoose.model('IP',IPpool);app.use(async (ctx, next) => { await next(); var data=await Ipproxy.find({},function(err,ips){  var ipmap=[];   ips.forEach(function(ip){     ipmap[ip._id]=ip;     //console.log(ip)   }); }) var map=data.map(ip=>ip.ip); ctx.response.type = 'text/json'; ctx.response.body = map;});app.listen(3000);console.log('server listen:3000')

至于為什么既有promise又有async,是因?yàn)閷?duì)異步語法還不是很熟,怎么會(huì)怎么寫了。

使用方式:

 根據(jù)package.json

npm install   // 安裝支持

node index.js  //獲取代理 ip

node server.js  //運(yùn)行簡(jiǎn)易ip接口

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 肇东市| 昂仁县| 甘孜| 新河县| 潞西市| 昭通市| 安阳市| 芒康县| 珲春市| 古浪县| 拜泉县| 文昌市| 兴仁县| 游戏| 成安县| 潼南县| 梅河口市| 开化县| 罗山县| 阿尔山市| 尚义县| 五台县| 新巴尔虎左旗| 东台市| 三穗县| 同心县| 南陵县| 大同县| 阿巴嘎旗| 抚宁县| 开封县| 漳平市| 府谷县| 涞源县| 巴青县| 连平县| 韶关市| 理塘县| 渭南市| 西乌珠穆沁旗| 西畴县|