爬虫为什么要设置代理?
很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问次数多的不像正常人,它会禁止这个IP的访问。所以我们可以设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取。
代理的原理:
在请求目的服务器之前,先请求代理服务器,然后让代理服务器去请求目的服务器,代理服务器从目的服务器拿到数据后,转发给我们的代码
代码中使用代理的步骤:
- 使用ProxyHandler传入代理,构建一个handler
- 使用handler构建一个opener
- 使用open()发送请求
from urllib import request
import ssl
def main():
# 不使用代理
# 返回访问的ip
url = 'http://httpbin.org/ip'
res = request.urlopen(url)
print("不使用代理返回ip:\n", res.read().decode('utf-8'))
# 使用代理
# 1.使用ProxyHandler传入代理,构建一个handler
handler = request.ProxyHandler({'http': "111.72.25.191:9999"})
# 2.使用handler构建一个opener
opener = request.build_opener(handler)
# 3.使用open()发送请求
res = opener.open(url)
print("使用代理返回ip:\n",res.read().decode('utf-8'))
if __name__ == '__main__':
main()
运行结果:
常用的代理:
- 西刺代理 : http://www.xicidaili.com/
- 快代理:http://www.kuaidaili.com/
- 代理云:http://www.dailiyun.com/