美文网首页
node爬虫类&&切换免费IP代理池

node爬虫类&&切换免费IP代理池

作者: 十年之后_b94a | 来源:发表于2020-03-16 18:26 被阅读0次

博主最近在开发一个小说APP、小说H5网站。后台数据打算用node爬虫小说网站。

image.png
image.png

在初写爬虫的时候发现即使增加延时请求爬网站,有时候还是会有连接错误,然后打算设计一个可以自动切换IP代理的爬虫类免费ip代理

/*
    @by:十年之后 592885211@qq.com
    爬虫请求类
    使用免费代理
    逻辑:先不使用代理请求,当爬取拿不到结果或超时切换IP代理
*/
const request = require("request");

const cheerio = require('cheerio');

const {warn,log} = require("./debug");

class reqSpider{
    constructor(option){
        this.proxy_list = [];
        this.reConnt = 0;
        this.opt = Object.assign({
            method: "GET",
            timeout: 120000,//2Mins
            rejectUnauthorized : false, //不检查证书
            reMax : 15 //只切换15次IP
        },option);
    }
    run(){
       return new Promise((resolve,reject)=>{
            let s = + new Date();
            request(this.opt,async (error,response,body)=>{
                let e = + new Date();
                if(error || body.indexOf("502 Bad Gateway") > -1){  //根据业务情况来判断发现爬取会出现502报错
                    await this.set_proxy();
                    if(this.reConnt < this.opt.reMax){ //如果超过15次重复爬取,就不在重复,不然任务会一直卡死
                        this.reConnt++;
                        this.run();
                    }else{
                        reject(error);
                    }
                  return
                }
                this.reConnt = 0;
                resolve({body,timeCon : e-s}); 
            })
        })
    }
    /*
        @测试代理IP是否可用
    */
    test_proxy(ip){
        return new Promise((resolve,reject)=>{
            request.get({
                url : "http://www.baidu.com",
                proxy : "http://" + ip
            },(err,res,body)=>{
                if(err){resolve(false)};
                resolve(true);
            })
        })
    }
    /*
        @检查代理
    */
    async check_ip(){

        !this.proxy_list.length && (this.proxy_list = await this.get_proxy());

        let s = this.proxy_list.shift();
        let result = await this.test_proxy(s);//true / false 测试IP是否可以使用
        if(result || !this.proxy_list.length){
            return s || null;
        }else{
            this.check_ip();
        }
    }
    /*
        设置代理
    */
    async set_proxy(){
        let proxy_ip = await this.check_ip();
        if(proxy_ip != undefined){
            this.opt.proxy = proxy_ip;
        }else{
            await this.set_proxy();
        }
    }
    /*
        获取代理IP
    */
    get_proxy(){
        //使用了https://www.freeip.top/?page=1 免费代理
        return new Promise((resolve, reject) => {
            request.get({
                url : "https://www.freeip.top/?page=1"
            },function(e,r,b){
                if(e){return []};
                var $ = cheerio.load(b);
                let td = $(".ip-tables").find(".layui-table tbody tr");
                let ips = [];
                for (let i = 0;i<td.length;i++) {
                    let ip = $(td).eq(i).find("td").eq(0).text() + ":" + $(td).eq(i).find("td").eq(1).text();
                    ips.push(ip);
                }
                resolve(ips);
            })
        })
    }  
}

目前小说app前端开发完成,后端正在考虑使用java还是node作为后台,java还在学习阶段,近期公司项目任务重。关注我后期小说源码、完整爬虫代码会上github ☺☺☺☺☺

相关文章

  • node爬虫类&&切换免费IP代理池

    博主最近在开发一个小说APP、小说H5网站。后台数据打算用node爬虫小说网站。 在初写爬虫的时候发现即使增加延时...

  • js逆向之全网代理IP的爬取

    之前搭建IP代理池的时候爬取过全网代理IP,全网代理IP免费的代理虽然只有首页的20个代理,但是可用程度非常高,可...

  • Python 学习记录1

    从豆瓣网下载整个相册的图片 从西祠代理网站爬取免费高匿ip 西祠代理 验证抓取的IP是否可用 建立代理IP池 抓...

  • 西刺免费代理IP爬取(1)

    西刺免费代理IP获取API接口无法访问,先尝试获取一下ip信息,后续需要验证下ip可用性,创建自有代理ip池。

  • python爬虫设置免费代理IP池

    姓名:张国帅 学号:19021110506 【嵌牛导读】 通过免费获取IP设置python爬虫代理ip池 【嵌牛鼻...

  • 爬虫(2)--- 构建简单代理IP池

    目录 1. 何为代理IP池?2. 代理IP池构建2.1 浏览器伪装2.2 代理IP爬取2.3 代理IP验证2.4 ...

  • 推荐一个便宜又好用的付费代理池

    做过爬虫的朋友想必对 IP 代理池都有过了解,当反爬虫策略是限制 IP 的请求次数时,就需要借助代理来解决。 免费...

  • day72 - 代理

    免费代理代理池 付费代理

  • 如何给自己搭建一个爬虫代理IP池?

    本文关键词:爬虫代理IP池,稳定的爬虫代理ip,搭建代理ip池 在这篇文章之前, 应该不少人都看过很多搭建代理ip...

  • Flask与Redis 维护代理池

    为什么要使用代理池? 许多网站反爬虫,会封IP 网上大量免费代理,利用好资源 定时的检测维护可以得到多个可用代理 ...

网友评论

      本文标题:node爬虫类&&切换免费IP代理池

      本文链接:https://www.haomeiwen.com/subject/zronehtx.html