python反爬虫应对措施之搭建代理IP池

通过网络访问服务器时,服务器端会通过IP地址知道是谁来对其进行访问,我们在爬虫过程中,如果经常使用一个IP地址对同一个URL进行访问,此IP很有可能被服务器拉入黑名单,就访问不了此URL了,这是针对具有IP反爬措施的网站来说。

百度直接搜索IP就会看到本机IP。

既然有IP反爬措施,那就有反反爬对策,我们可以构建一个IP池,针对具有IP反爬措施的网站,每次访问时都随机取出来一个IP,这样就会很大程度上避免被服务器识别出爬虫,大大提高了爬取数据的成功率。

给大家分享两个代理的网站,一个是免费的,叫快代理

https://www.kuaidaili.com/free/intr/

另一个是付费的,叫流冠代理,需要充值

https://www.hailiangip.com/

没有谁好谁坏,小编使用的是后者,不是因为小编有钱,毕竟一分价钱一分货嘛

接下来说一下IP代理池的搭建,说是代理池,其实就是一个存放很多IP地址的列表,每次从列表中随机取出一个IP,用于对目标网站进行访问,也就是获得一个存放IP的列表

快代理就不说了,拿出来直接用就行了。

对于流冠代理,需要充钱,充值后会自动给你一个订单号,找到提取API的选项后,填写相关参数,点击生成API链接,就会出现一个URL,访问这个URL就得到一些IP地址,需要填写的东西很简单,基本上省份就写到全国,数量自己定,数据格式我一般选用JSON格式,便于提取数据。

在pycharm中我们利用requests中的get对此API链接进行访问,得到下图所示的字典内容

 在键为data的值中,是一个有3个字典的列表,因为在生成API时参数填写的是3所以有3个元素,买的多生成的多。其中的ip和port是我们需要提取的,需要将其转换为字典格式才会被正常使用

例如  {'https': '223.215.98.186:10007'}

我们可以封装一个函数,要求就是传入一个api,会随机返回一个IP

import requests
import random
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
# url = ''
def ip_pool(api_url):
    response = requests.get(url=api_url,headers=headers).json()
    # print(response)
    # print(response['data'])
    proxies_list = []
    for i in response['data']:
        ip = i['ip']
        port = i['port']
        ip_dict = {'https':'{}:{}'.format(ip,port)}
        proxies_list.append(ip_dict)
        # print(ip_dict)
    # print(proxies_list)
    return random.choice(proxies_list)
api_url = ''#此处传入自己购买的代理ip
ip = ip_pool(api_url)
print(ip)

封装好的函数如上,名称为ip_pool,我们只需要传入购买生成的api_url,就会随机返回一个ip.

大家可以试一下,前面提到的快代理这个网站具备IP反爬,构建一个循环不断地对它进行访问,打印一下response会发现,可能第4次或第5次  状态码就变成了503,不是200,这就表示你的IP被这个网站限制了。如果你使用代理池,利用不同的IP同样对它进行循环访问,那么你被限制的可能性大大降低。池里的IP越多,就越不会被限制。当然,你要是池里就放一两个IP,那没什么卵用。

最后说一下IP生成出来后,怎么传入代码中

在requests中,IP需要带入参数proxies中,就和url,headers一样

response = requests.get(url=url,headers=headers,proxies=ip)

这就可以使用ip了

另外,购买的ip很有可能因为具有时效性导致代理ip无法正常使用,这就需要大家购买更好的代理服务。

你可能感兴趣的:(爬虫,python,python,爬虫)