Python爬虫笔记|Python爬虫学习笔记_DAY_19_Python爬虫之代理ip与代理池的使用介绍【Python爬虫】

【Python爬虫笔记|Python爬虫学习笔记_DAY_19_Python爬虫之代理ip与代理池的使用介绍【Python爬虫】】p.s.高产量博主,点个关注不迷路!
目录

I.代理ip及其在爬虫中的使用方法
II.简易代理池
I.代理ip及其在爬虫中的使用方法 首先先介绍一下什么是代理ip地址:

代理IP地址:代理IP地址一般是说代理服务器的IP地址,就是说你的电脑先连接到代理IP,然后通过代理服务器上网,网页的内容 通过代理服务器,传回你自己的电脑。代理IP就是一个安全保障,这样一来暴露在公网的就是代理IP而不是你的IP了!
以上是对代理ip的介绍,通过介绍可以看出,我们通过代理ip能够防止自己的ip在爬取内容的时候暴露,这样一方面提高了保密性,最重要的点是通过代理ip,我们可以应对ip被封这一反爬机制了!
下面是使用代理ip的示例代码,代码中主要涉及到的知识点是handler处理器的使用,这一内容不了解的朋友可以参考这篇博客:
Python爬虫学习笔记_DAY_18_Python爬虫之handler处理器的使用【Python爬虫】_跳探戈的小龙虾的博客-CSDN博客
示例代码如下:
# urllib代理 import urllib.requesturl = 'https://www.baidu.com/s?wd=ip'headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36' }proxies = { 'http' : '40.83.102.86:80' } request = urllib.request.Request(url = url, headers = headers)handler = urllib.request.ProxyHandler(proxies = proxies)opener = urllib.request.build_opener(handler)response = opener.open(request)content = response.read().decode('utf-8')with open('daili.html','w',encoding = 'utf-8') as fp: fp.write(content)

此时我们对比一下之前的handler处理器的基础使用代码,发现只有一个地方发生了变化:
handler = urllib.request.HTTPHandler()=>handler = urllib.request.ProxyHandler(proxies = proxies)
这句代码换成了新的ProxyHandler对象后,我们才能把ip地址作为参数传入(proxies是ip地址的变量)。
II.简易代理池 有了代理ip的基本使用方法,我们可以继续研究一下代理池:
所谓代理池,就是很多的ip在一起的一个结构,在这个结构里,我们能够在每一次请求中使用不同的ip地址,从而减少同一个ip的使用频率,以降低ip被封掉的风险,对抗反爬机制!
下面展示了一个简易的代理池示例代码:
# 代理池的使用 import urllib.request import randomproxies_pool = [ { 'http' : '27.203.215.138:8060' }, { 'http': '40.83.102.86:80' }, {'http': '14.215.212.37:9168'} ]proxies = random.choice(proxies_pool)url = 'https://www.baidu.com/s?wd=ip'headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36' }request = urllib.request.Request(url = url,headers = headers)handler = urllib.request.ProxyHandler(proxies = proxies)opener = urllib.request.build_opener(handler)response = opener.open(request)content = response.read().decode('utf-8')with open('dail2.html','w',encoding='utf-8') as fp: fp.write(content)

对比第一段代码,我们这里的区别在于ip地址有三个,组成了一个简单的代理池,我们通过random.choice(),从代理池这一字典对象中随机一个ip地址,而后传入handler对象的创建中,同上!

    推荐阅读