网络爬虫01: Urllib2库使用代理IP
2018-09-04 22:44
721 查看
今天将时间几乎花在了爬虫的Handler处理器和代理设置上,据说现在的反爬虫机制会发现爬虫程序,然后封掉爬虫程序请求的IP地址。这就糟糕了,所以还是要好好学习一下IP的代理设置,学完之后就可以使用代理来访问目标网址,可以避免封掉我IP了。还真是问题不愁找不到解决的人啊,我给大家推荐一些免费短期的代理网址:
西刺免费代理IP
快代理免费代理
全网代理IP
先写一个基本的HTTPHandler处理器,这是没有使用代理的情况,是使用真实IP访问的
这段代码中,需要总结的就是真实IP访问创建的是HTTPHandler,使用的方法也是urllib2的HTTPHandler方法,这个方法可以跟一个参数,debuglevel=1,功能是网络调试,它会返回在屏幕上接收和发送包的信息。创建好一个处理器对象后,就不能使用urllib2.urlopen方法打开一个网址了,而是要自定义一个opener,用opener.open来访问目标网址。创建方法是使用urllib2包下的build_opener来创建一个opener对象,参数是之前创建好的处理器对象,也就是http_handler,然后就可以使用opener.open来请求了
如果是想使用代理IP的话,创建处理器的方法就不是urllib2.HTTPHandler了,而是通过urllib2.ProxyHandler来创建一个IP代理处理器对象,代码如下:
与第一个不是代理访问的区别是,ProxyHTTPHandler必须加上IP和端口,参数是一个字典形式,以http作键,IP:端口为键值,如 {"http": "119.188.162.165:8081"},而且要注意的是,如果在ProxyHTTPHandler处理器方法下不想使用代理IP也要必须加上{},也就是说这个参数必须带,可以为空。另外之前没有使用创建处理器时是可以使用urllib2.urlopen方法打开网址的,但是使用了处理器就无法直接使用该方法,需要做的步骤就是在代码层面上装一个opener,这个可以用urllib.install_opener实现,参数就是创建好的opener,且无返回值
当然了,如果自己测试过的可用代理IP够多的话,也可以像随机获得User-Agent一样,可以随机选择一个IP访问,这样就更不容易被发现这是一个爬虫程序了,可以伪装的更好
当然还有一种代理叫做私密代理,免费的代理因为使用的人多,不是很稳定,很可能上一秒还在正常访问,下一秒就出现了无法访问的故障。所以又出现了一种叫做私密代理的代理,这种代理需要用户名和密码,具体代码实现如下:
西刺免费代理IP
快代理免费代理
全网代理IP
先写一个基本的HTTPHandler处理器,这是没有使用代理的情况,是使用真实IP访问的
#!/usr/bin/env python # coding=utf-8 import urllib2 # 构建一个HTTPHandler处理器对象,支持处理HTTP的请求 #http_handler = urllib2.HTTPHandler() # 在HTTPHandler增加参数"debuglevel=1"将会自动自动打开Debug log模式 # 程序在打印的时候就会显示此时接收和发送包的信息 http_handler = urllib2.HTTPHandler(debuglevel=1) # 调用build_opener()方法构建一个自定义的opener对象,参数是构建的处理器对象 opener = urllib2.build_opener(http_handler) request = urllib2.Request("http://www.baidu.com/") # 主要是将urllib2.urlopen改成了自定义的opener对象,使用方法open response = opener.open(request) print response.read()
这段代码中,需要总结的就是真实IP访问创建的是HTTPHandler,使用的方法也是urllib2的HTTPHandler方法,这个方法可以跟一个参数,debuglevel=1,功能是网络调试,它会返回在屏幕上接收和发送包的信息。创建好一个处理器对象后,就不能使用urllib2.urlopen方法打开一个网址了,而是要自定义一个opener,用opener.open来访问目标网址。创建方法是使用urllib2包下的build_opener来创建一个opener对象,参数是之前创建好的处理器对象,也就是http_handler,然后就可以使用opener.open来请求了
如果是想使用代理IP的话,创建处理器的方法就不是urllib2.HTTPHandler了,而是通过urllib2.ProxyHandler来创建一个IP代理处理器对象,代码如下:
#!/usr/bin/env python # coding=utf-8 import urllib2 import random # 启用代理开关,可判断后面是否需要使用代理 proxyswitch = True # 创建一个代理处理器对象,参数是一个字典类型,包含了代理类型和代理服务器IP+端口号 httpproxy_handler = urllib2.ProxyHandler({"http": "119.188.162.165:8081"}) # 创建一个没有代理的处理器对象,注意没有代理不代表没有参数,而要填写一个{} nullproxy_handler = urllib2.ProxyHandler({}) if proxyswitch: opener = urllib2.build_opener(httpproxy_handler) else: opener = urllib2.build_opener(nullproxy_handler) # 创建了一个全局的opener,之后都可以使用urlopen()方式去发送,也附带Handler的功能 urllib2.install_opener(opener) request = urllib2.Request("http://www.baidu.com/") response = urllib2.urlopen(request) print response.read()
与第一个不是代理访问的区别是,ProxyHTTPHandler必须加上IP和端口,参数是一个字典形式,以http作键,IP:端口为键值,如 {"http": "119.188.162.165:8081"},而且要注意的是,如果在ProxyHTTPHandler处理器方法下不想使用代理IP也要必须加上{},也就是说这个参数必须带,可以为空。另外之前没有使用创建处理器时是可以使用urllib2.urlopen方法打开网址的,但是使用了处理器就无法直接使用该方法,需要做的步骤就是在代码层面上装一个opener,这个可以用urllib.install_opener实现,参数就是创建好的opener,且无返回值
当然了,如果自己测试过的可用代理IP够多的话,也可以像随机获得User-Agent一样,可以随机选择一个IP访问,这样就更不容易被发现这是一个爬虫程序了,可以伪装的更好
import random proxy_list = [ {"http" : "124.88.67.81:80"}, {"http" : "124.88.67.81:80"}, {"http" : "124.88.67.81:80"}, {"http" : "124.88.67.81:80"}, {"http" : "124.88.67.81:80"} ] # 随机选择一个代理 proxy = random.choice(proxy_list)
当然还有一种代理叫做私密代理,免费的代理因为使用的人多,不是很稳定,很可能上一秒还在正常访问,下一秒就出现了无法访问的故障。所以又出现了一种叫做私密代理的代理,这种代理需要用户名和密码,具体代码实现如下:
#!/usr/bin/env python # coding=utf-8 import urllib2 authproxy_handler = urllib2.ProxyHandler({"host": "用户名:密码@IP:端口"}) opener = urllib2.build_opener(authproxy_handler) request = urllib2.Request("http://www.baidu.com/") response = opener.open(request) print response.read()
相关文章推荐
- python3实现网络爬虫(7)-- 使用ip代理抓取网页
- Python3网络爬虫之使用User Agent和代理IP隐藏身份
- Jsoup使用代理ip爬虫
- Apache2.4使用require指令进行访问控制--允许或限制IP访问/通过User-Agent禁止不友好网络爬虫
- python3使用代理ip伪装爬虫访问网站
- python 网络爬虫——请求头,ip代理
- 爬虫使用代理ip
- 网络爬虫爬取全国省市区(动态ip代理的获取,实现对ip限制的突破)
- 02. 使用上述01安装库实现最简单的网络爬虫
- 网络爬虫爬取全国省市区(动态ip代理的获取,实现对ip限制的突破)
- Python 爬虫入门—— IP代理使用
- 鱼c笔记——Python爬虫(三):使用User Agent和代理IP隐藏身份
- Python:爬虫使用代理防封IP:HTTP Error 403: Forbidden
- 网络爬虫—动态代理的使用
- Python 爬虫入门(二)—— IP代理使用 - 不剃头的一休哥 - 博客园
- Python3 爬虫使用User Agent和代理IP隐藏身份
- Python 爬虫之使用代理ip
- 【Python3.6爬虫学习记录】(十一)使用代理IP及用多线程测试IP可用性--刷访问量
- Apache2.4使用require指令进行访问控制--允许或限制IP访问/通过User-Agent禁止不友好网络爬虫 从Apache2.2升级到Apache2.4后,发现原来用来限制部分I
- 使用阻塞队列爬取代理ip实现爬虫