qq:800819103
在线客服,实时响应qq群
在线客服,实时响应客服电话
13318873961爬虫与反爬虫之间的对抗,不可谓不激烈,今天我们主要来讨论应对反爬虫中非常重要的一种手段,那就是IP代理。
正常来说,我们访问一个URL是这样的:
客户端向URL所在的服务器发起请求,是会携带本机IP地址的,这样服务器就能获取到我们的IP地址,当这个IP地址在一个时间段内发起请求过于频繁,可能就会限制其一段时间内无法访问。
在编写爬虫程序的过程中,为了防止这种情况发生,就需要用到IP代理,IP代理的原理是这样的:
第一步:我们会向代理服务器发起请求,告诉代理服务器我们要访问https://www.zhihu.com
第二步:代理服务器会代替我们向https://www.zhihu.com发起请求
第三步:服务器接收到代理服务器发来的请求后,就会将数据返回给代理服务器
第四步:代理服务器接收到服务器返回的数据后,就会将数据发送给客户端
这样,通过代理服务器向URL所在的服务器发起请求,就能完美地隐藏我们自身的IP,从而使得我们的IP不会被限制访问。
但是这样做,当然会有代价,我们通过IP代理来获取我们想要的数据,需要通过代理服务器转发一下,这样自然就会导致爬取的速度变慢,只有使用本机IP发起请求才是最快的。
接下来,我们还是老规矩,通过代码来演示下如何通过IP代理来发起请求:
import requests
# 免费代理可以从https://www.xicidaili.com/中获取到,但是免费的ip代理存活率很低
proxy = {
'http': '183.148.158.64:9999'
}
res = requests.get('https://www.baidu.com', proxies=proxy)
print(res.text)
# 如果能正确返回结果,那么就说明当前ip代理是存活的,是可以用的,否则当前ip代理是失效的
仅仅有一个代理ip是不够的,我们应该维护一个属于自己的ip代理池,当某一个ip代理失效的时候,就将它剔除出去,那么如何维护一个可用的ip代理池呢?
# 第一步:通过https://www.xicidaili.com/wt/获取到ip_list
import requests
from bs4 import BeautifulSoup
import random
def get_ip_list(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
}
res = requests.get(url, headers=headers)
res = BeautifulSoup(res.text, 'html.parser')
results = res.select('#ip_list tr')
for result in results[1:]:
ip = result.select('td')[1].text
port = result.select('td')[2].text
judge(ip, port)
# 获取到了ip之后,并不能直接保存,首先应该判断是否可用
# 第二步:判断获取到的ip是否有效
ip_list = []
def judge(ip, port):
proxy = {'http': ip+':'+port}
try:
res = requests.get('https://www.baidu.com', proxies=proxy)
except Exception:
print('该ip:' + ip + '无效')
return False
else:
if 200 <= res.status_code < 300:
# 返回的状态码在200到300之间表示请求成功
ip_list.append((ip, port))
return True
else:
print('该ip:' + ip + '无效')
return False
# 第三步:从ip_list中随机获取一个ip
def get_random_ip():
ip, port = random.choice(ip_list)
result = judge(ip, port)
if result:
return ip + ':' + port
else:
ip_list.remove((ip, port))
# 第四步:调用上述函数
if __name__ == '__main__':
get_ip_list('https://www.xicidaili.com/wt/')
print(ip_list)
print(len(ip_list))
这样,我们就得到了一个可用的ip代理池,可惜,遗憾的是免费的ip代理往往不稳定,绝大多数ip都是不可用的,大家可以去尝试下。
相关文章内容简介
1 使用IP代理防止被反爬
爬虫与反爬虫之间的对抗,不可谓不激烈,今天我们主要来讨论应对反爬虫中非常重要的一种手段,那就是IP代理。正常来说,我们访问一个URL是这样的:客户端向URL所在的服务器发起请求,是会携带本机IP地址的,这样服务器就能获取到我们的IP地址,当这个IP地址在一个时间段内发起请求过于频繁,可能就会限制其一段时间内无法访问。在编写爬虫程序的过... [阅读全文]
最新标签
推荐阅读
19
2018-12
IP地址被占用?如何禁止用户修改IP地址?
有些公司是采用固定IP地址来访问互联网的,但是难免会遇到有人随意修改IP地址,这样就导致别人的IP被占用,然后造成网络混乱,网络管理压力大,现在黑洞代理提供一个禁止修改IP地址的方
20
2019-04
代理IP是网络营销最有效的推广方式吗?
问答类网站(知乎、百度问答)具有极强的互动性,可快速传播信息。作为重要的网络推广方式之一不得不提,问答类网站推广属于口碑推广的手段之一。利用问答类网站,结合SEO的技巧,抛出用
28
2019-01
IP地址的a,b,c 类是如何划分的?
在网络通信技术上,每个IP地址都包含2个标识码(ID):互联网ID和主机ID。Internet委员会又各自界定了5种IP地址类型,使互联网技术适应不同容量的网络,那么今日,黑洞代理就带领大伙儿了解
15
2019-07
爬取大量数据就用代理ip
大多数人即使不懂大数据的原理,也晓得大数据“杀熟”,由于这个事都上过很多次新闻了。目前,很多行业都应用了大数据,利用大数据来掌握顾客的供需,就比如零售行业的,哪类产品最火
热门文章