未加星标

那些年,我爬过的北科(七)――反反爬虫之使用代理ip

字体大小 | |
[开发(python) 所属分类 开发(python) | 发布者 店小二04 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

本章将要介绍一下如何使用代理ip解决反爬虫的 禁ip 的问题,并扩展了解一下代理ip池的构建与adsl服务器的使用。

代理ip初探 如何获取自己的ip

下面,我们先来看一下如何获取自己的ip地址。我们直接在百度上搜索ip,或者通过 http://www.ip138.com/ 这个网站就可以。比如说我现在的ip如下:


那些年,我爬过的北科(七)――反反爬虫之使用代理ip

ip作为一个身份信息,一般是不会变的,想要改变自己的ip的方法就是找代理了。

所谓代理,其实就是比如说我们要访问一个网页,但这个时候我们不自己去访问,而是告诉代理我们想要访问什么,然后代理用自己的ip去访问,再返回给我们。这样网站其实拿到的不是我们的真实ip,而是代理的ip。

python中使用代理ip

免费的代理ip有很多,虽然这种网站都不会提供太多的代理ip。我们这里以西刺代理的免费ip为例,看看在python中如何使用代理ip。

首先打开 http://www.xicidaili.com/nn/ ,可以看到这里有很多代理ip。


那些年,我爬过的北科(七)――反反爬虫之使用代理ip

这里可以根据当日的情况挑选一个ip,我这里选择了 139.129.207.72:808 这个代理。然后我们编写代码,调用ip138的接口,查看一下自己使用代理后的ip是否改变。

import requests from bs4 import BeautifulSoup def parse_ip(content): soup = BeautifulSoup(content, "html.parser") print(soup.body.get_text()) resp = requests.get("http://2018.ip138.com/ic.asp") parse_ip(resp.content.decode("gbk")) print("\n改变ip后:") proxies = {"http": "http://139.129.207.72:808"} # 需要改成在西刺代理上看到的可用代理ip resp2 = requests.get("http://2018.ip138.com/ic.asp", proxies=proxies) parse_ip(resp2.content.decode("gbk"))

可以看到使用前,我的ip还是北京的ip,使用后变成了山东的ip了。


那些年,我爬过的北科(七)――反反爬虫之使用代理ip
构建代理ip池

在使用代理ip时,我们一般都会去花钱买一些可用的ip或者是购买包月服务。但实际上,买来的ip并不是都能用的,而且大多时候是很多都不能用,不能用比例非常之高。

代理ip池的目标其实就是要验证那些能用,哪些不能用,如果可用,就把可用的ip放到一个“池子”里。等我们爬虫程序需要ip的时候,从“池子”里拿就好了。

这里我们不会去自己写一个代理ip池子,而是举一个例子:比如说我们想要爬取链家网的房价数据。

Validator编写

我们需要首先写一个验证器validator来验证ip是否可用。比如说在之前爬链家的时候,如果ip被禁了之后,就会跳转到一个验证的页面,让我们点击倒着的房子进行验证,其实也就是验证码了。这种ip的话就是算不可用的。

当然,还有超时、不可连接等等的情况。

validator的代码类似下面这样:

def validate_lianjia(proxy_url): proxies = {"http": proxy_url} try: resp = requests.get("http://bj.lianjia.com/", proxies=proxies, timeout=20) # 20秒超时 content = resp.decode("utf-8") if "请点击倒着的房屋" in content: return False else: return True except: return False 代理ip池运行流程

有了validator,我们就可以拿买来或者爬来的代理ip去验证了。如果validator返回为true,就是可用的。我们把可用的ip放到“池子”里,这个“池子”可以是数据库,也可以是本地文件。只要爬虫程序能拿到就好了。

当然,我们会有一些更新策略,比如说多久判断一次池子里面的代理。是否要剔除池子里的数据。

这块我们就不深入展开了。

开源代理ip池

当然也有开发者开发的免费代理ip池,其实就是先去各大代理ip网站爬一些代理来,然后再验证,提供一个Http的接口。

比如说这个: https://github.com/awolfly9/IPProxyTool 。当时笔者在大学的时候想爬链家,但是不舍得买代理ip,然后就用的这个库搞的代理ip爬的链接网的房价数据。

一个简单粗暴的方法:adsl服务器

自我感觉代理ip还是一种比较麻烦的方法,下面介绍的adsl服务器就会很简单粗暴了。

adsl服务器其实就是拨号上网服务器,它每拨一次号,就获取一个新的IP。

所以,在adsl服务器上换ip的话,就像下面一样,两行代码搞定。

import os os.system("ifdown ppp0") # 先断网 os.system("ifup ppp0") # 再联网

因为每次换ip都需要断网然后再联网。所以如果是并发的爬虫,在adsl服务器上会变得很难管理。如果我们的爬虫是单线程爬取的,adsl服务器的体验还是不错的。

如果想体验adsl服务器,最好自己租一个月练练手就知道怎么用了,一般价格在100以内/每月。

本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程

代码区博客精选文章
分页:12
转载请注明
本文标题:那些年,我爬过的北科(七)――反反爬虫之使用代理ip
本站链接:https://www.codesec.net/view/620945.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(python) | 评论(0) | 阅读(174)