Python 爬虫入门<四>——代理服务器

Python 爬虫入门<四>

标签:代理服务器
在我们做爬虫的时候,对弈同一个网页,我们爬取次数多了之后,服务器会屏蔽我们的IP,所以,我们要解决这个问题,不然每次访问,就把自己Ip屏蔽了,那还要不要活了<苦笑>;所以,我们采取代理服务器,也就是,在我们访问网站的时候,显示的不是我们真实的IP,而是代理服务器的IP,就算屏蔽了IP,我们再换一个IP就可以了,所以这个方法很棒!!!
首先,我们百度或者谷歌一下,就可以找到很多代理服务器的网址,我这里随便贴一个吧http://31f.cn/,这个上面就有很多的代理服务器的IP,我们只要在代码中修改对应的IP地址就可以了:

image
我们就选择第一个吧!IP地址为:140.143.134.248,端口号: 3128,完整的一个格式为::140.143.134.248:3128
1. 创建一个代理处理器ProxyHandler:

proxy_support = urllib.request.ProxyHandler(),ProxyHandler是一个类,其参数是一个字典:{ ‘类型’:’代理ip:端口号’}

什么是Handler?Handler也叫作处理器,每个handlers知道如何通过特定协议打开URLs,或者如何处理URL打开时的各个方面,例如HTTP重定向或者HTTP cookies。

2.定制、创建一个opener:

opener = urllib.request.build_opener(proxy_support)

什么是opener?python在打开一个url链接时,就会使用opener。其实,urllib.request.urlopen()函数实际上是使用的是默认的opener,只不过在这里我们需要定制一个opener来指定handler。
3.安装opener

urllib.request.install_opener(opener)

install_opener 用来创建(全局)默认opener,这个表示调用urlopen将使用你安装的opener。
代码实现:

import urllib.request

def use_proxy(proxy_addr,url):
    #设置代理服务器
    proxy = urllib.request.ProxyHandler({'http':proxy_addr})
    #创建对象
    opener = urllib.request.build_opener(proxy)
    #创建全局默认的对象
    urllib.request.install_opener(opener)
    #读取数据
    data = urllib.request.urlopen(url).read().decode('utf-8')
    return data
proxy_addr = "140.143.134.248:3128"
data = use_proxy(proxy_addr,"http://www.baidu.com")
print (len(data))

结果:

urllib.error.URLError: <urlopen error [WinError 10061] 由于目标计算机积极拒绝,无法连接。>

Process finished with exit code 1

说明代理Ip失效,小红心找一个IP:

import urllib.request

def use_proxy(proxy_addr,url):
    #设置代理服务器
    proxy = urllib.request.ProxyHandler({'http':proxy_addr})
    #创建对象
    opener = urllib.request.build_opener(proxy)
    #创建全局默认的对象
    urllib.request.install_opener(opener)
    #读取数据
    data = urllib.request.urlopen(url).read().decode('utf-8')
    return data
proxy_addr = "111.155.116.226:8123"
data = use_proxy(proxy_addr,"http://www.baidu.com")
print (len(data))
C:\Users\Administrator\PycharmProjects\untitled2\venv\Scripts\python.exe F:/python/python代码/venv/python爬虫4.py
112620

Process finished with exit code 0

说明代理服务器设置成功。

猜你喜欢

转载自blog.csdn.net/Travelerwz/article/details/79778116
今日推荐