什么是代理服务器,为什么要用
代理服务器是一个在用户和网页服务器中间的一个服务器。用户先借助代理服务器访问网页,网页得到的是代理服务器的IP,资源经过代理服务器返回到用户,即代理用户获得网络信息
若使用用户服务器通过爬虫访问网页服务器,容易因为同一个IP在短时间内多次访问某一网页服务器而被发现是爬虫而被禁止。使用代理服务器,解决IP限制的问题
怎么做
首先是需要一个代理服务器,以前的xicidaili.com上不去了,现在可用xiladaili.com,在上面随意找一个IP地址和其提供的端口。注意提供的代理IP可能是失效的
使用ProxyHandler()方法设置代理IP,向该方法传入一个字典(记录代理的IP地址),这里字典的属性值可用形参代替
把代理IP用opener对象设置为HTTPHandler,声明该opener对象为全局方便使用urlopen()发送请求
import urllib.request
def use_proxy(url,proxy_ip):
# 代理IP对象
proxy = urllib.request.ProxyHandler({"http":proxy_ip})
# 建立opener对象,给该opener添加代理IP
# 参数2:设置为HTTPHandler【固定不可改】
opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler)
# 安装为全局opener()
urllib.request.install_opener(opener)
data = urllib.request.urlopen(url).read().decode("utf-8","ignore")
return data
proxy_ip="49.75.59.242:3128"
url="http://www.baidu.com"
use_proxy(url, proxy_id) # 调用函数,传入参数
print(len(data))
改进
把proxy_ip设置为一个列表的形式,用for i in proxy_id循环逐个调用其中的代理IP,总有一个IP是可用的,同理也可以避免每次换IP需要改参数的问题。