python爬虫100例--爬虫技术--IP代理(4)

写在前面

为甚麽需要代理

这个就和网站服务器的自我保护机制相关了,我们知道通过代码访问某个网站的速度时惊人的,认为手动访问需要更多的时间。服务器未来保护自己的资源不被快速消耗,就做出对那些同一个ip地址的访问时间间隔做了要求,一般一个IP访问某个固定网站次数太多,服务器默认将该IP放入黑名单中,那么我们的访问就熄火了。所以聪明的人们就想到了,我每次访问的时候,就不断地换IP地址,混淆服务器,这样一来,就可以达到持续访问的效果了

一、代理IP的获取

一般来说,总有一群人做一些免费的服务给大家以此来吸引大家。但是我们都是价格敏感性客户,所以也只能白嫖写免费的代理ip了,不过大家也知道,免费的没有好货,这就需要我们自己来甄别了。

1.1 代理网站

快代理 目前国内最好的免费白嫖代理的网站了,之前的西刺代理已经消失在这个地球上了。那么话不多说,且看如何简单获取免费IP。

import requests
from lxml import etree
url = "https://www.kuaidaili.com/free/inha/1/"
headers = {
	"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
}
res = requests.get(url=url, headers=headers)
content = res.text
tree = etree.HTML(content)
ips = tree.xpath('//*[@id="list"]/table/tbody/tr')
with open('ip.text','w') as f:
	for ip in ips:
		ip_address = ip.xpath('./td[1]/text()')[0]
		ip_port = ip.xpath('./td[2]/text()')[0]
		ip_type = ip.xpath('./td[4]/text()')[0]
		ip = '{ip_address}:{ip_port}'.format(ip_address=ip_address,ip_port=ip_port)
		proxy = {ip_type:ip}
		f.write(str(proxy))
		f.write('\n')

将获取到的IP存入到ip.text中,便于访问时读取。
在这里有个问题,也是小编发现了,我们从快代理网站获取到IP类型都是以大写的形式出现的,如HTTP,这个在我们需要访问网站时,requests模块对其有要求,因此建议将其转化为http形式的。

{'http': '117.88.35.71:3000'}
{'http': '60.184.202.99:3000'}
{'http': '125.87.95.116:3256'}
{'http': '47.98.183.59:3128'}
{'http': '117.88.246.225:3000'}
{'http': '27.191.60.103:3256'}
{'http': '114.98.114.40:3256'}
{'http': '182.84.144.251:3256'}
{'http': '121.230.210.245:3256'}
{'http': '27.191.60.191:3256'}
{'http': '221.224.136.211:35101'}
{'http': '117.35.255.251:3000'}
{'http': '106.45.105.127:3256'}
{'http': '182.84.144.234:3256'}
{'http': '121.237.88.178:3000'}

这就是小编简单获取的一些IP。那么接下来我们试试,这些IP是否有效。

二、测试IP

import requests
url = 'http://httpbin.org/ip'
headers ={
	"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
}
proxys = open('ip.text','r')
for line in proxys:
	line = eval(line) #text存的都是字符串,所以将其转为dict格式
	try:
		r = requests.get(url,proxies=line,headers=headers)
		print(r.json())
	except:
		print("无效")

三、感慨万分

经过上面的两步骤,相信大家,应该也明白了IP的原理以及使用方法了,但是小编也说过,免费的总是那么不尽人意,只有通过这些方法才可以确定那些IP才是我们的“真命天子”。一般挺失望的,所以你可以尽可能多的获取些IP。
那么,还有甚麽疑难杂症,就在下面留言吧。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值