本章将要介绍一下如何使用代理ip解决反爬虫的禁ip的问题,并扩展了解一下代理ip池的构建与adsl服务器的使用。html
下面,咱们先来看一下如何获取本身的ip地址。咱们直接在百度上搜索ip,或者经过www.ip138.com/这个网站就能够。好比说我如今的ip以下:python
ip做为一个身份信息,通常是不会变的,想要改变本身的ip的方法就是找代理了。git
所谓代理,其实就是好比说咱们要访问一个网页,但这个时候咱们不本身去访问,而是告诉代理咱们想要访问什么,而后代理用本身的ip去访问,再返回给咱们。这样网站其实拿到的不是咱们的真实ip,而是代理的ip。github
免费的代理ip有不少,虽然这种网站都不会提供太多的代理ip。咱们这里以西刺代理的免费ip为例,看看在python中如何使用代理ip。数据库
首先打开www.xicidaili.com/nn/,能够看到这里有不少代理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并非都能用的,并且大多时候是不少都不能用,不能用比例很是之高。url
代理ip池的目标其实就是要验证那些能用,哪些不能用,若是可用,就把可用的ip放到一个“池子”里。等咱们爬虫程序须要ip的时候,从“池子”里拿就行了。spa
这里咱们不会去本身写一个代理ip池子,而是举一个例子:好比说咱们想要爬取链家网的房价数据。
咱们须要首先写一个验证器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
复制代码
有了validator,咱们就能够拿买来或者爬来的代理ip去验证了。若是validator返回为true,就是可用的。咱们把可用的ip放到“池子”里,这个“池子”能够是数据库,也能够是本地文件。只要爬虫程序能拿到就行了。
固然,咱们会有一些更新策略,好比说多久判断一次池子里面的代理。是否要剔除池子里的数据。
这块咱们就不深刻展开了。
固然也有开发者开发的免费代理ip池,其实就是先去各大代理ip网站爬一些代理来,而后再验证,提供一个Http的接口。
好比说这个:github.com/awolfly9/IP…。当时笔者在大学的时候想爬链家,可是不舍得买代理ip,而后就用的这个库搞的代理ip爬的连接网的房价数据。
自我感受代理ip仍是一种比较麻烦的方法,下面介绍的adsl服务器就会很简单粗暴了。
adsl服务器其实就是拨号上网服务器,它每拨一次号,就获取一个新的IP。
因此,在adsl服务器上换ip的话,就像下面同样,两行代码搞定。
import os
os.system("ifdown ppp0") # 先断网
os.system("ifup ppp0") # 再联网
复制代码
由于每次换ip都须要断网而后再联网。因此若是是并发的爬虫,在adsl服务器上会变得很难管理。若是咱们的爬虫是单线程爬取的,adsl服务器的体验仍是不错的。
若是想体验adsl服务器,最好本身租一个月练练手就知道怎么用了,通常价格在100之内/每个月。