文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

nodejs爬虫中如何设置动态ip

2023-06-20 13:00

关注

这篇文章主要介绍了nodejs爬虫中如何设置动态ip,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

说明

1、建立动态IP需要使用superagent-proxy插件,superagent-proxy。

2、为了避免每次爬取时都要获得一次动态IP列表,在redis中保存爬取到的动态IP列表,并设置10分钟的过期时间。重新发送获取动态IP的请求后,请在数据过期。

实例

  package.json     {     "name": "xxx",     "version": "1.0.0",     "description": "xxx",     "main": "arf.js",     "scripts": {     "arf": "nodemon src/app.js --exec babel-node --config package.json"     },     "keywords": [     "爬虫"     ],     "author": "lidikang",     "license": "MIT",     "dependencies": {   "bluebird": "^3.5.1",   "cheerio": "^1.0.0-rc.2",   "eventproxy": "^1.0.0",   "mongoose": "^4.13.6",   "mongoose-findorcreate": "^2.0.0",   "progress": "^2.0.0",   "redis": "^2.8.0",   "superagent": "^3.8.1",   "superagent-proxy": "^1.0.2"  },   "devDependencies": { "babel-cli": "^6.26.0",   "babel-preset-es2015": "^6.24.1",   "babel-preset-stage-2": "^6.24.1",   "nodemon": "^1.12.4"   },   "nodemonConfig": {   "ignore": [   "ips.json",   "docs   function connectRedis() {   let client = redis.createClient(config.REDIS_URL)   client.on("ready", function(err) {   console.log('redis连接 √')   })   client.on("error", function(err) {   console.log(`redis错误,${err} ×`);   })   return client   }      async function getProxyIp() {   // 先从redis读取缓存ip   let localIpStr = await redisClient.getAsync('proxy_ips')   let ips = null   // 如果本地存在,则随机返回其中一个ip,否则重新请求   if (localIpStr) {   let localIps = localIpStr.split(',')   return localIps[parseInt(Math.random() * localIps.length)]   } else {   let ipsJson = (await request.get('http://api.pcdaili.com/?orderid=888888888&num=100&protocol=1&method=1&an_ha=1&sp1=1&sp2=1&format=json&sep=1')).body   let isRequestSuccess = false   if (ipsJson && ipsJson.data.proxy_list) {   ips = ipsJson.data.proxy_list   isRequestSuccess = true   } else {   ips = ['http://127.0.0.1']   }   // 将爬取结果存入本地,缓存时间10分钟   if (isRequestSuccess) {   redisClient.set("proxy_ips", ips.join(','), 'EX', 10 * 60)   } return ips[parseInt(Math.random() * ips.length)]   }   }   async function doRequest(){   let userAgent = userAgents[parseInt(Math.random() * userAgents.length)]   let ip = await getProxyIp()  let useIp = 'http://' + ip   request.get('http://www.xxx.com')   .set({ 'User-Agent': userAgent })   .timeout({ response: 5000, deadline: 60000 })   .proxy(ip)   .end(async(err, res) => {   // 处理数据   })   }

感谢你能够认真阅读完这篇文章,希望小编分享的“nodejs爬虫中如何设置动态ip”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯