Python 爬虫基础:使用代理 IP 和随机 UA 绕过反爬机制

本周事情比较多,又要赶项目,又要搞毕设,而且住的地方也远了,来回挺不方便的,所以......

不过事情虽然耽误了,但是每周一篇的爬虫文章还是要雷打不动的写的。想来想去,那就分享一下我挂代理 IP 和随机 UA 的方法吧。这些作为一个技术点,可以为爬虫“保驾护航”,一定程度上骗过服务器的反爬机制。

写在前面的话

在爬取网站的时候,经常会遇到一个问题,就是很多网站上都部署了反爬虫机制,当服务器检测到一段时间内同一个 IP 持续密集的访问网站,则将其判定为爬虫程序,在一段时间内不允许该 IP 地址访问服务器。

如果平时没什么事儿的话,可以写个延迟函数,每爬一次随机歇个几秒钟,这样可以很有效的降低访问密度,从而避开反爬机制。但是,这样的话太浪费时间了,几万条数据可能要爬一整天。有时候我们需要更加有效率的爬取数据,所以需要使用代理 IP 和随机 UA(User-Agent)。说白了就是伪装爬虫,假装不同的人使用不同的浏览器在访问网站。

使用代理 IP

之前我了解到的使用代理 IP 的方法,一般都是提前从一些免费的代理网站上爬取免费代理,存在本地或者数据库中,使用的时候再进行读取。

但是这样做有个小问题就是,免费的代理 IP 存活时间都特别短暂,从几十秒到几十分钟不等,我之前整过几次,每次爬完 IP 之后,到用的时候,已经有一半左右的IP已经失效了。感觉不是特别好用,就没在搞了。

后来看到这位大佬的思路之后,我才重新发现了使用代理 IP 的强大之处。它在爬虫运行的同时,在线获取代理 IP。每次只获取一页,存于数组中,随机使用。当大部分的 IP 失效之后(记录访问失败的次数,当超过一定阈值时,则视为此页代理 IP 失效),然后重新获取一页代理 IP,如此,可保证每次使用的都是最新的 IP,而且不需要额外的空间和文件来存放代理 IP。

使用随机 UA

UA,即 User-Agent ,使用它可以将我们的爬虫伪装成浏览器,让对方以为是真人在使用浏览器访问,从而骗过目标网站的反爬机制。但是使用固定的 UA 去爬也是会有问题的,你想嘛,假如你发现最近几个小时内来访问的几万个用户,用的都是同一个浏览器,你还会认为对面是真人吗?不封它封谁!

所以,为了让我们的爬虫更像真人在使用,我们不仅要为它设置 UA,还要使用随机 UA(让对方服务器开心的以为有好多的用户在访问呢)。

这是 UA 列表,截取了部分,这个在网上随便一找就能找到好多。

使用的时候,直接使用随机函数 random.choice() 来从列表中选择选择一个。

使用方法可以参考以下代码:

写在后面的话

上面介绍了如何使用代理 ip 和 随机 ua 来避开网站的反爬虫机制,实现高效率的数据爬取。

本文中使用的方法亲测可用,但是代码并非全部源码,不保证代码可以直接复制粘贴使用,建议大家理解原理之后,根据自己的爬虫项目需要进行相应的调整。

如果文章中有哪里没有讲明白,或者讲解有误的地方,欢迎在评论区批评指正,或者扫描下面的二维码,加我微信,大家一起学习交流,共同进步。

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

扫码关注云+社区

领取腾讯云代金券