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

内容介绍

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

代理ip初探

如何获取本身的ip

下面,咱们先来看一下如何获取本身的ip地址。咱们直接在百度上搜索ip,或者经过www.ip138.com/这个网站就能够。好比说我如今的ip以下:python

ip做为一个身份信息,通常是不会变的,想要改变本身的ip的方法就是找代理了。git

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

python中使用代理ip

免费的代理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或者是购买包月服务。但实际上,买来的ip并非都能用的,并且大多时候是不少都不能用,不能用比例很是之高。url

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

这里咱们不会去本身写一个代理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的接口。

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

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

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

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

因此,在adsl服务器上换ip的话,就像下面同样,两行代码搞定。

import os

os.system("ifdown ppp0")  # 先断网
os.system("ifup ppp0")    # 再联网
复制代码

由于每次换ip都须要断网而后再联网。因此若是是并发的爬虫,在adsl服务器上会变得很难管理。若是咱们的爬虫是单线程爬取的,adsl服务器的体验仍是不错的。

若是想体验adsl服务器,最好本身租一个月练练手就知道怎么用了,通常价格在100之内/每个月。

相关文章
相关标签/搜索