代理ip

>

换ip软件

>

http代理

>

ip代理

您的位置:首页 > 新闻资讯 > 文章内容
爬虫被源网站流量监控封杀IP?用代理IP来解决!
来源:网连代理 作者:admin 时间:2019-07-17 16:45:38

  之前一个做了爬虫的客户上周末来找我,希望给爬虫加上代理IP


  并不是所有网站都会监控流量来源,一些运行良好的网站需要考虑数据安全性和核心竞争力,才会对流量进行监控,防止爬虫的高频率抓取导致核心数据外泄。


爬虫被源网站流量监控封杀IP?用代理IP来解决!


  这部分网站一般是通过IP来识别爬虫,当同个IP在一段时间内请求明显高于人访问网页的速度时,会判定为爬虫请求从而对该请求的IP进行短期或长期封杀。


  那这时候就需要使用代理来绕过对IP的监控或封杀。在网上能找到一些提供免费代理IP的平台,不过亲测极其不稳定,通常100个里只有个别能用。


  所以真正的想用代理IP来做爬虫,还是找付费的比较好。通常爬虫用途可以买动态IP:平台提供一个API,每次刷新请求会得到一个或一堆有效期比较短的IP,然后从这些IP里挑选来代理请求,失效时重新生成可用的IP即可。


  我写的爬虫是node里跑的,这里不得不提的是,在js里非常流行的axios请求库亲测并不能实现代理请求(也许是我姿势不对),参考网上教程需要使用request这个请求库(然而并不好用,API并不是流行的Promise方式)


  所以我在逻辑代码里是这样实现的,首先封装一个请求函数,以下是核心示例代码:


const request = require('request')
const _ = require('lodash')
const _request = (ipList,url) => {
 return new Promise(async (resolve, reject) => {
     let useIp = _.sample(ipList);
     //ip列表里随机返回一个
     const options = {
       method: 'GET',
       url: url,
       gzip: true,
       encoding: null,
       proxy: useIp, //动态设置代理ip
       timeout: 2000
       //超时时间,太短代理不稳定,太长请求过久
     };
     request(options, (error, response, body) => {
       if (error) >= 0) {
         console.log(`${useIp} 代理有问题`);
         resolve(undefined)
         return;
       }
       console.log(`使用代理  ${useIp}`)
       try {
         let data = JSON.parse(body)
         resolve(data)
       } catch (e) {
         resolve(undefined)
       }
     })
 })
}

module.exports = async (url) => {
 try {
   let result = await _request(url)
   if (result) return result
   return axios.get(url).then(res => res.data)
 } catch (e) {
   return axios.get(url).then(res => res.data)
 }
}


  上面封装过后的请求函数就暴露了一个统一的request方法,使用时候只需要request(url)即可。


  从代码里也可以看到:当代理有效时会用代理,当代理无效、超时或其他任何错误时会返回正常的请求,这也是降级保障了爬虫代码的健壮性。


  在使用代理IP时,超时时间是个需要不断调整的设置。超时太短了会导致代理不可用的概率提高,而超时太长则会影响整个爬虫的速度。


  比如我给客户跑的这个爬虫,不使用代理时跑完需要4个小时,而如果使用代理,每次请求的时间就加长了,在设置2000毫秒的超时下,整个任务跑下来需要翻2倍的时间。


相关文章内容简介
推荐阅读
  • 16 2019-02
  • 12 2019-10
    代理IP对爬虫工作的帮助体现在哪里

    爬虫的工作流程是什么呢?爬虫首先要做的工作就是访问网页,然后获取网页内容,这里就是获取网页的源代码。源代码里包含了网页的部分有用信息,所以只要把源代码获取下来,就可以从中

  • 03 2020-07
  • 06 2020-01
    关于代理你需要知道这些

    代理在我们日常开发中是一个很常见的知识点,也是我们面试中经常被问到的内容,本文带大家来学习和分析下代理的相关内容。1.概念 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问

  • 12 2019-08
    代理服务器解决上网限制

    很多用户在正常访问网站的时候,可能会出现限制的情况,还有企业等对网络做出限制,例如上网时间,或者对网站软件使用时间有限制,这些限制,都可以用代理服务器解决。首先,代理服务

  • 07 2019-08
    选择代理IP需要注意哪些事项

    大家对于代理IP是否都熟悉呢?其实大部分人还是很熟悉的。其实很多人都以为换IP是个非常简单的事情,但是换IP的方法也比较多,根据不同的需求会导致换IP的方法不同。所以使用和维护的人