首页
学习
活动
专区
工具
TVP
发布

scrapy突破反爬的几种方式(二)

阅读本文大概需要 9 分钟

上回说到设置随机 User-Agent ,这次来一个随机代理 ip 的设置。

代理ip

在爬虫中,为了避免网站将我们的 ip 封掉,我们就要使用代理 ip 。虽然说代理 ip 没有原装的好,但是有些时候还是要使用代理ip 来获取数据的。

原理

随机代理 ip 简单来说就是爬取网上的免费代理ip ,然后存入数据库,在数据库中随机拿到一个代理ip来用。具体结合到 scrapy 中,我们就要在 Middleware.py 文件中修改,原理跟上文代理的设置一样,不懂的可以去上篇文章看一下。

实战演练

在上文的 scrapydownloadertest 项目基础上操作。

在 spiders 的同级目录下,新建一个 Python Package 。还要新建python文件,具体名称参考图片。目录结构如下:

目录结构

从西刺网上获取免费的代理ip 保存到数据库中。

数据库我用的是MySQL,在 navivat for mysql 中连接 MySQL ,新建一个数据库,名称随意,这里就叫做 proxy 吧,在代码中把连接数据库的代码补充完整。

新建一个数据表 proxy_ip 并写下如下字段:

proxy_ip

这里我已经新建好了,并且运行的代码。

新建之后,我们运行上述代码,这时候会看到数据库中已经有了数据。接下来就是从数据库中随机获取一个代理 ip ,供我们程序使用。

这里从数据库中随机获取一个代理ip,并测试代理ip是否可用,不可用的删掉。这里有个小技巧,如果你爬取的是其他网站,就把百度的链接换成你要爬取的网站,这样会提高代理ip的可用性。

运行此代码会随机获取一个可用的ip代理。

接下来在 Middleware.py 中把代理ip 加上:

在 settings.py 文件中配置一下:

运行spider文件,就可以在输出的日志上面看到代理ip在使用了。

总结

使用这样的方法可以用到代理 ip 从而有效的隐藏了自己的真实 ip 。免费从网上获取的代理通常来说没有付费得到的 ip 稳定性好。如果有条件,还是建议自费获取一些代理 ip。

自己的代理还是最好用的,我们在爬取的时候可以放慢速度,增加延迟等方式以避免自己的 ip 被封。同时不要让网站的压力太大。这样才能共存。

End

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券