当使用同一个IP去爬取同一个网站的网页时,次数多了或者时间久了,该网站服务器就会对这个IP进行屏蔽,而这也是我们爬虫程序必须要解决的一个问题。如何去解决这个问题呢?
如果有HTTP基础,就知道有一种叫做代理服务器的东西,而我们也可以使用这个代理服务器解决上述问题。
基本思路:在爬取网页的时候,在对方服务器上显示的是别人的IP地址,那么,即使对方将显示出来的这个IP地址进行屏蔽,那么我们可以再次换另一个IP地址进行网站爬取。
基本原理:使用代理服务器时,在对方服务器上显示的不是我们真实的IP地址,而是代理服务器的IP地址
一般情况下,我们不仅需要知道IP地址,还需要知道网络端口号,即:IP地址:端口号的形式。
以下是具体代码:
#导入库 import urllib.request #定义一个函数 def use_proxy(addr,url): """使用代理服务器 addr:代理服务器的IP url:要爬取的网页URL """ #使用urllib.request.ProxyHandler()来设置对应的代理服务器信息 proxy=urllib.request.ProxyHandler({'http':addr}) #urllib.request.build_opener()创建一个Opener对象,第一个参数为代理信息,第二个参数为urllib.request.HTTPHandler opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler) #使用urllib.request.install_opener(opener),注册(安装)opener对象 urllib.request.install_opener(opener) #urllib.request.urlopen(url).read().decode('utf-8')打开对应的网页读取数据,编码后赋值给变量data data=urllib.request.urlopen(url).read().decode('utf-8') #返回data return data addr="202.75.210.45:8888" data=use_proxy(addr,"http://www.baidu.com") print(data)