node.js 抓取代理ip实例代码


Posted in Javascript onApril 30, 2017

node.js实现抓取代理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(`当前是第${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数据库,用于存储抓取到的ip,目前还未实现ip验证。写这个主要是处于好奇。

上面的代码就可以实现抓取ip代理网站的ip并存到mongodb数据库中。

下面在放出一个基于koa2的api接口的简易服务器实现

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,是因为对异步语法还不是很熟,怎么会怎么写了。

使用方式:

 根据package.json

npm install   // 安装支持

node index.js  //获取代理 ip

node server.js  //运行简易ip接口

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
一些javascript一些题目的解析
Dec 25 Javascript
分享几个超级震憾的图片特效
Jan 08 Javascript
js arguments对象应用介绍
Nov 28 Javascript
javascript仿qq界面的折叠菜单实现代码
Dec 12 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
Dec 12 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
Dec 21 Javascript
Bootstrap3 内联单选和多选框
Dec 29 Javascript
JS获取多维数组中相同键的值实现方法示例
Jan 06 Javascript
js中的触发事件对象event.srcElement与event.target详解
Mar 15 Javascript
Angular.js实现动态加载组件详解
May 28 Javascript
vue cli 全面解析
Feb 28 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
Sep 27 Javascript
socket.io学习教程之深入学习篇(三)
Apr 29 #Javascript
socket.io学习教程之基本应用(二)
Apr 29 #Javascript
socket.io学习教程之基础介绍(一)
Apr 29 #Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
Apr 29 #Javascript
Vue.js在使用中的一些注意知识点
Apr 29 #Javascript
jQuery实现按比例缩放图片的方法
Apr 29 #jQuery
Vue开发中整合axios的文件整理
Apr 29 #Javascript
You might like
php备份数据库类分享
2015/04/14 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
php实现学生管理系统
2020/03/21 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
img标签中onerror用法
2009/08/13 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
Python学习pygal绘制线图代码分享
2017/12/09 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
python人民币小写转大写辅助工具
2018/06/20 Python
Python 处理图片像素点的实例
2019/01/08 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
2019/01/15 Python
Python3解释器知识点总结
2019/02/19 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
python分布式编程实现过程解析
2019/11/08 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
如何找出EMP表里面SALARY第N高的employee
2013/12/05 面试题
酒店门卫岗位职责
2013/12/29 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
汽车检测与维修专业求职信
2014/07/04 职场文书
小学安全汇报材料
2014/08/14 职场文书
个人遵守党的政治纪律情况对照检查材料思想汇报
2014/09/25 职场文书
格列佛游记读书笔记
2015/06/30 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS