Python教你玩转代理ip

我们在做爬虫的时候,难免会遇到各类反扒措施,其中最普遍就是服务器端在特定时间内识别某ip地址访问次数,超过阈值则判定为“网络机器人”,接着会返回403或者其他一些奇怪的数据。下面以1个小例子给大家介绍一种非常有效的解决办法:

第一步:应用场景

以爬取美团某火锅店评论数据为例

Python教你玩转代理ip

总共有849页的评论,评论数据的接口和参数如下图

Python教你玩转代理ip

Python教你玩转代理ip

下面用requests模拟请求

Python教你玩转代理ip

参数offset控制评论页数,返回结果如下:

Python教你玩转代理ip

前几十页还是能正常返回数据的,后面就开始返回错误网页了。


第二步:解决思路

遇到这类问题,使用代理ip是一种很好的解决办法,我们可以选择付费的代理ip,这类ip即稳定又实用,但是价格稍微有点贵,贴一张代理ip价格图

对一般的学生党来说还是舍不得。

庆幸的是,现在有很多免费的代理ip网站,如下图所示

Python教你玩转代理ip

这是随便找的一个免费代理ip网站,但是有很多ip地址是不能用的,所以我们可以用python写个爬取ip地址并验证其是否可用的函数,在爬取美团评论的程序中引用此函数,一旦上个代理ip失效,则立即访问此函数,会获得1个新的能用的代理ip,相当于是一个代理ip的api。


第三步:写获得代理ip的爬虫函数

1.分析该代理ip网站,就是一简单的静态网页,直接用requests获取静态网页,然后用Beatifulsoup解析即可

Python教你玩转代理ip


2.爬取ip地址


这里给大家介绍一个解析网页的小技巧,首先我用find_all找到所有标签为tr的网页,然后在此基础上,再用find_all找到该结构下所有的td标签,很方便就把IP地址和端口取出来了,比用xpath简单多了。

3.验证该ip地址

Python教你玩转代理ip

这一步比较好理解,就是用上面爬下来的地址作为代理ip先测试一下能不能用,如果能用则直接返回美团评论的爬虫程序。


第四步:将该函数插入美团评论爬虫程序中

Python教你玩转代理ip

这段代码的意思是,如果用该代理ip模拟请求成功,则break跳出循环,否则将重新循环,再次请求新的ip地址,直至能请求通过。


小结:本文主要介绍免费代理ip的使用方法,只适合爬数量相对较少、对稳定性要求不高数据,否则还是要用付费ip。

请在“python的爬虫与数据分析”后台获得源码


分享到:


相關文章: