首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

隧道代理——狗蛋的正确使用姿势

狗蛋是一个用Python实现的隧道代理程序,接下来我们来看看该用什么样的姿势来使用它。

狗蛋可以开箱即用,它已经集成了部分免费代理(从互联网上获取的公开代理)。

项目名称:goudan(狗蛋)

项目地址:https://github.com/daoye/goudan

用途

在需要随机切换代理的场景下都可以使用。

比如,爬虫爬取某些网站时需要随机更换访问网站的IP,以防止网站将您的爬虫列入黑名单。

通常的做法是爬虫自己维护了一个代理池,在爬虫爬取目标页面时,随机从池中选取一个代理并使用该代理访问目标网站。

这种方法是可行的,不过美中不足的是每个爬虫都需要自己去维护一套代理池,虽然不困难但也挺麻烦。

狗蛋的作用是,将维护代理池这些工作从爬虫中剥离出来,由一个独立的程序来维护这些代理,爬虫只需要设置一个代理:即狗蛋的服务地址就可以了,狗蛋在截获到流量之后,随机从池中选取一个代理并将流量转发出去,这样爬虫就可以专注于自己的业务,而不再需要关注这些琐碎的事情了。

狗蛋的架构

架构图

Dispatcher:核心角色,负责运行Spider,并协调Spider、Pipline、Pool这三个组件进行工作。

Rproxy:核心角色,负责流量转发。

Pipline:处理程序内部的数据流转、协调中间件的调用。

Middleware:挂接在Pipline上,处理由Pipline传输过来的数据。

Proxy Pool:代理池,用来存储可用的代理。

Spider:爬虫,用来从网页(或其它地方)获取代理。

用法

通过Docker运行(推荐)

以默认参数运行:

使用自定义的参数运行:

查看帮助:

通过源代码运行(需要python3.7)

推荐使用virtualenv创建一个虚拟环境,并在该虚拟环境下运行狗蛋。

狗蛋默认运行在1991号端口上、选用可以同时支持http和https的代理。

狗蛋启动一段时间以后(通常只需要30秒左右),你可以通过命令来验证是否可以开始正常使用。

使用时只需要将代理地址设置为:,就可以达到不断更换IP的目的了。

创建自定义的Spider

如果你已经有一些可用的代理,并且想把这些代理加入代理池,那么你需要通过编写一个自定义的Spider来实现,示例:

在“Spiders”目录中,创建一个名为”mySpider.py”的文件,文件内容如下:

这个Spider没有去爬取任何一个网站,而是直接返回了一个包含代理地址的数组字典。

然后打开“setting.py”这个文件,找到变量“spiders”,将自定义的spider加入该数组中即可,狗蛋在启动后会自动加载“spiders”中配置的爬虫,然后定期运行它们。

再来看一个复杂一些的例子:

这个Spider将会从某个网站上去获取代理,因此它声明了它需要访问的目标地址(通过urls变量定义),基类BaseSpider封装了网络访问的相关细节,因此MySpider只需实现函数,从返回的内容中解析出可用的代理地址就可以了。

如果你想自己实现网络访问的相关操作,那么也可以不从BaseSpider继承,只需要定义一个run方法就行,run方法的原型为:

属性“idle”定义了爬虫休息的间隔(默认的,Dispatcher会每隔一分钟运行一下所有的爬虫,对于某些网站来说太过频繁的访问可能会导致被ban掉),你可以通过这个属性来定义爬虫两次运行期间的时间间隔,单位是分钟。

每一项代理都用一个字典表来描述,它包含下面这些属性:

host: 代理的Ip地址。

port: 代理的端口,必须是一个整数。

type: 代理类型,可选值有:http, https, http/https,socks,如果你不知道是什么类型可以设置成“http”。

loc: 代理所在区域,暂时没有用上。不过,在下一个版本里面实现不同区域使用不同的代理时会用上。

提示

狗蛋的代理池(即所有可用代理的集合)来源于公开的免费代理,这些代理的质量参差不齐。时效性也有很大限制。即便狗蛋在获取到这些代理之后进行了可用性验证,也无法保证存在于池中的代理在任何一个时刻都是可用的。

程序启动后,要等到爬虫至少获取一个可用代理之后才可以正常使用。

代理池没有进行持久化存储,因为这些代理的时效性都非常短暂,完全没有持久化的价值,目前的策略是:定期重新爬取、定期对池中的代理进行验证并剔除不可用代理。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180813G1S9YP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券