黑洞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. 11

    2019-06

    python爬虫怎么设置HTTP代理服务器

    代理服务器的功能是代理网络用户去取得网络信息,好比是网络信息的中转站。做python爬虫时,如果你想突破访问限制,HTTP代理服务器可以帮助你,不仅如此,HTTP代理服务器还可以帮助用户隐

  2. 18

    2019-03

    没有IP代理软件的初学 Python 需要安装哪些软件?

    编程这个东西是真的奇妙。对于懂得的人来说,会觉得这个工具是多么的好用、有趣,而对于小白来说,就如同大山一样。其实这个都可以理解,大家都是这样过来的。那么接下来就说一下python

  3. 05

    2019-11

    优质代理ip有缺点吗?

    人无完人,代理ip也是如此,再怎么优质,也有无法忽视的缺点。

  4. 05

    2019-05

    如何代理IP?

    尽管代理IP的用途很广泛,使用的人群越来越多,但依然有很多新手不太理解代理IP的作用,有哪些类型,今天就来讨论下代理IP的分类。

  5. 06

    2019-11

    代理IP对游戏有什么用?

    现在生活已经离不开网络,网络游戏也是深受大家的喜欢,并且还有很多人利用游戏来工作。在玩游戏的时候,很多用户喜欢多开游戏,这样能获取更多的游戏内资源。但稍有不慎,账号就会被

  6. 21

    2019-09

    代理服务器ip可以用来做什么

    代理,也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理