黑洞HTTP

黑洞HTTP

您的位置: 首页 > 新闻资讯 > HTTP代理 > 正文

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

发布时间:2019年03月19日 来源:互联网

给爬虫加上代理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倍的时间。


相关文章内容简介

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

给爬虫加上代理IP,并不是所有网站都会监控流量来源,一些运行良好的网站需要考虑数据安全性和核心竞争力,才会对流量进行监控,防止爬虫的高频率抓取导致核心数据外泄。这部分网站一般是通过IP来识别爬虫,当同个IP在一段时间内请求明显高于人访问网页的速度时,会判定为爬虫请求从而对该请求的IP进行短期或长期封杀。那这时候就需要使用代理来绕过对IP的监控或封杀。在网上能找到一些提供免费代理IP的平台,不过亲测极其不稳定,通常100个里只有个别能用。所以真正的想用代理IP来做爬虫,还是找付费的比较好。通常爬虫用途可以买动态IP:平台提供一个API,每次刷新请求会得到一个或一堆有效期比较短的IP,然后从这些IP里挑选来代理请求,失效时重新生成可用的IP即可。我写的爬虫是node里跑的,这里不得不提的是,在js里非常流行的axios请求库亲测并不能实现代理请求(也许是我姿势不对),参考网上教程需要使用req [阅读全文]

热门标签

最新标签

推荐阅读

  1. 06

    2019-06

    如何避免HTTP代理IP的使用误区

    在我们日常应用的代理服务中,HTTP代理IP可以说是最常见的,也是最被普通网民所接受的。虽然经常使用,但是对于这种代理方式,许多人仍然存在一定使用误区,在这里小编就为大家消除这些

  2. 04

    2019-10

    避免IP和账号被封使用代理IP

    IP 和账号被封的原因分析:1.注册信息不真实,发布虚假广告,或是使用个人账户,创建广告账户并投放广告。

  3. 28

    2019-10

    代理IP怎么通过更换ip批量注册账号?

    很多时候,我们在做问答营销或者论坛发帖时都遇到过这种情况,比如在一些网站上面批量注册帐号、发布留言评论,或在使用一些即时通讯软件频繁发送消息等等这些行为都会遇到系统的IP限

  4. 24

    2019-06

    如何使用代理IP隐藏IP地址?

    以前说使用 User-Agent 来伪装自己不是爬虫,但是这并不能规避服务器禁止访问的问题,但因为程序的运行速度是非常快的,如果我们利用一个爬虫程序在网站爬取数据,一个固定IP会非常频繁去

  5. 07

    2019-09

    代理IP服务器的主要功能是什么?

    IP代理是服务器的重要安全功能,本质上是一种特殊的网络服务,主要用作中转站,流行的观点是家庭的门不能走,只能通过窗口转到相邻的房子,然后从邻居的房子出去,所以如何选择好邻居

  6. 14

    2019-05

    国内ip代理软件

     国内ip代理软件,网络代理是一种特殊的网络服务,一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。你是否在苦苦寻找一款简单、实用、稳定、安全的代理软件呢?不要再踏破