代理ip池的ip是重复利用的吗_爬虫被封怎么办?用Node.js构建一个私人IP代理池...

b514020c-a416-eb11-8da9-e4434bdf6706.png

还记得刚学爬虫的时候,选了一个美女网站来练手,效率极高,看到什么都想爬下来。爬得正高兴呢,出现了一连串错误信息,查看后发现因为爬取太过频繁,被网站封了ip,那时起就有了构建代理ip池的念头。

网上搜索一下代理ip就会发现有很多网站提供,但是稳定好用的都要收费,免费倒也有一堆,但大多数都不能用。而且我写的一般都是小爬虫,极少有爬取上白g数据的时候,用收费的代理ip有点浪费。

所以,写了这个代理ip池,从各大代理ip网站爬取收集免费的代理ip,然后一一进行测试,从中筛选出高速可用的ip。得益于Node的异步架构,速度非常快,可以直接在自己的爬虫里调用,每次爬取前获取最新的代理ip,以后妈妈就再也不用担心我的爬虫被封了。

接下来会分为三个部分来讲解,怎么下载,怎么用和怎么写,如果只是想用的话看前两篇就够了。

1.如何下载

有两种途径,一个是通过Github:Card007/Proxy-Pool;

另一种是通过npm添加:npm install ip-proxy-pool;

两种方式都可以,推荐github,有个使用说明,后期我还会进行更新,欢迎start。

2.如何使用

//导入本地模块

3.怎么手动写一个代理ip池

现在来说说自己怎么写一个代理ip池,以西刺为例,用到的工具和方法基本上和上一篇爬取豆瓣top250一样,先是爬取西刺网站前5页的所有免费ip,然后保存在sqlite数据库里,接着通过每一个代理ip来访问某个网址,返回200则是可用,返回其它数字的则删除,来看代码:

//导入相应的库

接下来就碰到了Node的一个大坑,异步。由于异步架构,需要用到Promise来控制,比如在这个代理ip池里,会出现reqeust函数还没有爬完的时候就开始执行验证函数,直接导致错误。

所以我们这里需要分为两组,一组为异步爬取网站信息,另一组为异步验证代理ip,现在来改造一下上面的代码:

//生成网址

接下来分析一下网页内容,这里我们只需要ip,端口,和类型即可:

//分析网页内容

接着来实现数据库的存储删除功能:

//打开数据库

接着将数据库里的ip提取出来,进行测速筛选:

//从数据库提取出来的ip会通过这个类创建一个对象

最后,来写几个运行函数:

var 

大功告成:

b614020c-a416-eb11-8da9-e4434bdf6706.png

完整代码可以通过github查看:GitHub
也可以访问我的网站,获取更多文章:Nothlu.com

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值