欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2017年04月30日 10:31:14   投稿:lqh  
這篇文章主要介紹了node.js 抓取代理ip實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下

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ù)庫,用于存儲(chǔ)抓取到的ip,目前還未實(shí)現(xiàn)ip驗(yàn)證。寫這個(gè)主要是處于好奇。

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

下面在放出一個(gè)基于koa2的api接口的簡易服務(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)行簡易ip接口

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

相關(guān)文章

  • Node.js readline模塊與util模塊的使用

    Node.js readline模塊與util模塊的使用

    本篇文章主要介紹了Node.js readline模塊與util模塊的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • 淺析node應(yīng)用的timing-attack安全漏洞

    淺析node應(yīng)用的timing-attack安全漏洞

    本篇文章給大家通過原理的原因分析了node應(yīng)用的timing-attack安全漏洞問題,有興趣的朋友閱讀參考下。
    2018-02-02
  • express+multer上傳圖片打開亂碼問題及解決

    express+multer上傳圖片打開亂碼問題及解決

    這篇文章主要介紹了express+multer上傳圖片打開亂碼問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 詳解從買域名到使用pm2部署node.js項(xiàng)目全過程

    詳解從買域名到使用pm2部署node.js項(xiàng)目全過程

    本篇文章主要介紹了詳解從買域名到使用pm2部署node.js項(xiàng)目全過程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • express的中間件cookieParser詳解

    express的中間件cookieParser詳解

    這篇文章主要介紹了node.js中express的中間件cookieParser的使用方法,需要的朋友可以參考下
    2014-12-12
  • Node.js 回調(diào)函數(shù)實(shí)例詳解

    Node.js 回調(diào)函數(shù)實(shí)例詳解

    這篇文章主要介紹了Node.js 回調(diào)函數(shù)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Node.js高級(jí)編程之UDP可靠性分析

    Node.js高級(jí)編程之UDP可靠性分析

    這篇文章主要為大家介紹了Node.js高級(jí)編程之UDP可靠性分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 14款NodeJS Web框架推薦

    14款NodeJS Web框架推薦

    這篇文章主要介紹了14款NodeJS Web框架推薦,其中大多數(shù)框架都是基于node.js的Express實(shí)現(xiàn),需要的朋友可以參考下
    2014-07-07
  • nodejs微信掃碼支付功能實(shí)現(xiàn)

    nodejs微信掃碼支付功能實(shí)現(xiàn)

    本片文章通過代碼示例給大家詳細(xì)講述了如何用nodejs寫出微信掃碼支付這個(gè)功能,有興趣的朋友可以參考下。
    2018-02-02
  • Node.js實(shí)現(xiàn)簡單聊天服務(wù)器

    Node.js實(shí)現(xiàn)簡單聊天服務(wù)器

    Node.js 是一個(gè)基于Chrome JavaScript運(yùn)行時(shí)建立的一個(gè)平臺(tái), 用來方便地搭建快速的,易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用,今天我們來探討下,如何使用node.js實(shí)現(xiàn)簡單的聊天服務(wù)器
    2014-06-06

最新評(píng)論