用Python爬虫抓取代理IP
不知道大家在访问网站的时候有没有遇到过这样的状况就是被访问的网站会给出一个提示,提示的显示是“访问频率太高”,如果在想进行访问那么必须要等一会或者是对方会给出一个验证码使用验证码对被访问的网站进行解封。之所以会有这样的提示是因为我们所要爬取或者访问的网站设置了反爬虫机制,比如使用同一个IP频繁的请求网页的次数过多的时候,服务器由于反爬虫机制的指令从而选择拒绝服务,这种情况单单依靠解封是比较难处理的,所以一个解决的方法就是伪装本机的IP地址去访问或者爬取网页,也就是我们今天所有跟大家所说的代理IP
目前网上有许多代理ip,有免费的也有付费的,例如西刺代理等,免费的虽然不用花钱但有效的代理很少且不稳定,付费的可能会好一点,比如说在线代理 下面讲一下代理IP的试用,将可用ip存入MongoDB,方便下次取出。
运行平台Windos
Python版本Python3.6
IDE: Sublime Text
其他Chrome浏览器
简述流程为
步骤1了解requests代理如何使用
步骤2从代理网页爬取到ip和端口
步骤3检测爬取到的ip是否可用
步骤4将爬取的可用代理存入MongoDB
步骤5从存入可用ip的数据库里随机抽取一个ip,测试成功后返回
对于requests来说,代理的设置比较简单,只需要传入proxies参数即可。
不过需要注意的是,这里我是在本机安装了抓包工具Fiddler,并用它在本地端口8888创建了一个HTTP代理服务(用Chrome插件SitchyOmega),即代理服务为127.0.0.1:8888,我们只要设置好这个代理,就可以成功将本机ip切换成代理软件连接的服务器ip了。
这里我是用来http://httpbin./get作为测试网站,我们访问该网页可以得到请求的有关信息,其中origin字段就是客户端ip,我们可以根据返回的结果判断代理是否成功。返回结果如下
接下来我们便开始爬取代理IP,我们打开Chrome浏览器查看网页,并找到ip和端口元素的信息。
可以看到,代理IP以表格存储ip地址及其相关信息,所以我们用BeautifulSoup提取时很方便便能提取出相关信息,我们需要注意的是,爬取的ip很有可能出现重复的现象,尤其是我们爬取多个代理网页又存储到同一数组中时,所以我们可以使用集合来去除重复的ip。
将要爬取页数的ip爬取好后存入数组,然后再对其中的ip逐一测试。
这里就用到了上面提到的requests设置代理的方法,我们使用http://httpbin./ip作为测试网站,它可以直接返回我们的ip地址,测试通过后再存入MomgoDB数据库。
连接数据库然后指定数据库和集合,再将数据插入就OK了。
运行查看一下结果吧
运行了一段时间后,难得看到一连三个测试通过,赶紧截图保存一下,事实上是,毕竟是免费代理,有效的还是很少的,并且存活时间确实很短,不过,爬取的量大,还是能找到可用的,我们只是用作练习的话,还是勉强够用的。现在看看数据库里存储的吧。
因为爬取的页数不多,加上有效ip也少,再加上我没怎么爬,所以现在数据库里的ip并不多,不过也算是将这些ip给存了下来。现在就来看看怎么随机取出来吧。
由于担心放入数据库一段时间后ip会失效,所以取出前我重新进行了一次测试,如果成功再返回ip,不成功的话就直接将其移出数据库。
这样我们需要使用代理的时候,就能通过数据库随时取出来了。
总的代码如下
zhihu./people/hdmi-blog
空调维修
- 海信电视维修站 海信电视维修站点
- 格兰仕空调售后电话 格兰仕空调维修售后服务电
- 家电售后服务 家电售后服务流程
- 华扬太阳能维修 华扬太阳能维修收费标准表
- 三菱电机空调维修 三菱电机空调维修费用高吗
- 美的燃气灶维修 美的燃气灶维修收费标准明细
- 科龙空调售后服务 科龙空调售后服务网点
- 华帝热水器维修 华帝热水器维修常见故障
- 康泉热水器维修 康泉热水器维修故障
- 华凌冰箱维修电话 华凌冰箱维修点电话
- 海尔维修站 海尔维修站点地址在哪里
- 北京海信空调维修 北京海信空调售后服务
- 科龙空调维修 科龙空调维修故障
- 皇明太阳能售后 皇明太阳能售后维修点
- 海信冰箱售后服务 海信冰箱售后服务热线电话
- 海尔热水器服务热线