Maison > interface Web > js tutoriel > le corps du texte

Comment capturer l'IP du proxy dans node.js ?

零下一度
Libérer: 2017-05-03 10:03:03
original
1586 Les gens l'ont consulté

Cet article présente principalement les informations pertinentes sur l'exemple de code d'adresse IP de proxy de saisie de node.js. Les amis qui en ont besoin peuvent s'y référer

node.js implémente la saisie d'adresse IP de proxy

Fichier principal : 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= $(&#39;#list table tbody&#39;).find(&#39;tr&#39;).eq(i).find(&#39;td&#39;).eq(0).text() ;
    let port = $(&#39;#list table tbody&#39;).find(&#39;tr&#39;).eq(i).find(&#39;td&#39;).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(&#39;ok&#39;);
    }, time);
  })
};
const pageNumber=10;
var start = async function(){
  for(let j=1;j<pageNumber;j++){
     console.log(`当前是第${j}次等待..`);
    fetchUrl(`http://www.kuaidaili.com/free/inha/${j}/`);
    await sleep(1500);
  }
}
start();
Copier après la connexion

Support du package : 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"
 }
}
Copier après la connexion

Mongodb doit être installé localement La base de données est utilisée pour stocker les adresses IP capturées. La vérification IP n'a pas encore été mise en œuvre. J'écris ceci principalement par curiosité.

Le code ci-dessus peut capturer l'adresse IP du site Web proxy IP et la stocker dans la base de données mongodb.

Ce qui suit est une implémentation de serveur simple basée sur l'interface API koa2

serveur

const Promise=require(&#39;bluebird&#39;);
let mongoose=require(&#39;mongoose&#39;);
const koa=require(&#39;koa&#39;);
const app=new koa();
var router = require(&#39;koa-router&#39;)();
Promise.promisifyAll(mongoose);
let Schema=mongoose.Schema;
mongoose.connect(&#39;mongodb://localhost:27017/ipproxypool&#39;);
let IPpool=new Schema({
  ip:{type:String,unique:true}
})
let Ipproxy=mongoose.model(&#39;IP&#39;,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 = &#39;text/json&#39;;
 ctx.response.body = map;
});
app.listen(3000);
console.log(&#39;server listen:3000&#39;)
Copier après la connexion

Quant à savoir pourquoi il y a à la fois des promesses et des asynchrones , C'est parce que je ne connais pas très bien la syntaxe asynchrone, alors comment savoir comment l'écrire ?

Utilisation :

Selon package.json

npm install // Prise en charge de l'installation

node index.js // Obtenir Proxy ip

node server.js //Exécuter une interface IP simple

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal