您的位置:首页 > 编程语言 > Python开发

python-快速使用urllib爬取网页(6-代理服务器)

2017-12-24 10:17 330 查看
通过上面的学习,我们发现爬取的时候会出现一下问题

1、网站不能被爬取,即网站设置了反爬取

2、字符码的问题

3、爬取的时候超时了,我们没爬取成功

a、模拟浏览器访问网页的两种方法

b、采用编码解码

c、自己设置Timeout时间

现在,又出现了一个问题,当我们的IP被网站服务器屏蔽的时候,我们就无法访问网站,就像我们无法访问国外的网站一样,我们这时就要用到代理服务器(翻墙的同学可能更加了解),也就是说我们不用自己的IP去访问网站,而是通过代理服务器IP去访问网站获取信息,我们再从代理服务器那里获取我们想要的信息。

我们可以从网上搜索免费代理IP,例如小编随便搜索了一个

http://www.xicidaili.com/

我们选择一个验证时间很短的(长的可能失效了)

220.168.237.187 8888 湖南常德 高匿 HTTPS 1天 不到1分钟

比如这个,验证时间不到一分钟

学过计算机网络的同学可能都知道,在运输层实现进程之间的逻辑通信的时候,我们采用的是套接字,套接字的格式就是:

IP:端口号,我们这里就用到套接字

通过代理服务器,我们就可以实现爬取我们无法访问的网站信息了

def use_proxy(proxy_addr,url):

import urllib.request

proxy = urllib.request.ProxyHandler({"http":proxy_addr})

opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler)

urllib.request.install_opener(opener)

data = urllib.request.urlopen(url).read().decode("utf-8")

return data

proxy_addr = "220.168.237.187:8888"
data = use_proxy(proxy_addr,"http://www.baidu.com")
print(len(data))


use_proxy : 自定义函数,主要实现采用代理服务器爬取网页的功能

urllib.request.ProxyHandler():设置对应的代理服务器信息

urllib.request.build_opener() : 创建一个自定义的opener对象

urllib.request.install_opener():创建全局默认的opener对象

若爬取失败,可能就是IP失效了,大家可以换个IP试一试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息