urllib实战----使用代理服务器爬取网页(021)

时间:2022-05-20 18:26:46

一:代理服务器:

代理服务器是处于我们互联网中间的服务器,如果使用代理服务器,我们在浏览信息的时候先向代理服务器发出请求,然后由代理服务器向互联网获取信息,再返回给我们。

如果我们访问互联网络,就是直接访问,互联网服务器有信息之后就会把信息返回给用户,这时候容易获取到信息,但是如果你的ip地址在某段时间内大量的访问,则服务器就会觉得你是恶意攻击,就会把你的ip封掉。这时访问服务器时则爬取不到任何东西。ip一般来说是固定的,如果是APN拨号的话,每拨号一次换一个ip,但是也有一定的问题,拨号也要成本,并且拨号的ip地址很相近,那么人家就会把一堆ip给封掉。现在我们有代理服务器,提供你浏览网页,首先给代理服务器发送请求,代理服务器向互联网获取信息,互联网返回给代理服务器,代理服务器则会返回给我们。此时,网络的ip地址是代理服务器的,那么我们就可以用多个不同的代理服务器爬取多个网站。这样就不会被封掉ip了。

二:实战

(1)找到代理ip,http://www.xicidaili.com 中有大量的代理ip

urllib实战----使用代理服务器爬取网页(021)

爬取百度网页的代码:

urllib实战----使用代理服务器爬取网页(021)

注意:如果现实连接失败是因为ip代理服务器地址失效了,需要重新刷新获取代理ip


三:综上述代码:

from urllib import request
#设置一个自定义函数,可以在函数中实现ip代理的功能,以后可以直接调用这个功能
#ProxyHandler方法里面是一个字典,http://www.xicidaili.com 中有大量的代理ip
#互联网默认端口80
proxy_addr="119.28.112.130:3128"
url="http://www.baidu.com"
def use_proxy(url,proxy_addr):
   proxy=request.ProxyHandler({"http":proxy_addr})
   #添加代理ip
   opener=request.build_opener(proxy,request.HTTPHandler)
  #将 opener安装为全局
   request.install_opener(opener)
   request.urlopen(url).read().decode("utf-8","ignore")
   return data

#调用
data=use_proxy(url,proxy_addr)
print(len(data))