爬虫_urllib_handler处理器
作者:互联网
为什么要学习handler?
如果定制更高级的请求头,随着业务逻辑的复杂请求对象的定制已经满足不了我们的需求(动态cookie和代理不能使用请求对象的定制)
1.Handler处理器的基本使用
#Handler的基本使用 import urllib.request url = 'http://www.baidu.com' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36' } request = urllib.request.Request(url=url,headers=headers) # handler build_opener open #(1)获取handler对象 handler = urllib.request.HTTPHandler() #(2)获取opener对象 opener = urllib.request.build_opener(handler) #(3)调用open方法 response = opener.open(request) content = response.read().decode('utf-8') print(content)
2.代理服务器
2.1 代理的常用功能?
1)突破自身IP访问限制,访问国外站点
2)访问一些单位或团体内部资源
3)提高访问速度
通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度
4)隐藏真实IP
上网者也可以通过这种方法隐藏自己的IP,免受攻击
2.2 代码配置代理
创建Request对象
创建ProxyHandler对象
用handler对象创建opener对象
使用opener.open函数发送请求
import urllib.request url = 'http://www.baidu.com/s?wd=ip' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36' } #请求对象的定制 request = urllib.request.Request(url=url,headers=headers) #代理模拟浏览器访问服务器 #代理ip设置,“快代理”找免费IP,免费不好使就花钱买一个IP proxies = { 'http':'39.99.54.91:80' } handler = urllib.request.ProxyHandler(proxies = proxies) opener = urllib.request.build_opener(handler) response = opener.open(request) #获取响应的信息 content = response.read().decode('utf-8') #保存 with open('daili.html','w',encoding='utf-8')as fp: fp.write(content)
代理ip网站:https://free.kuaidaili.com/free/
3.代理池
#代理池设置 import urllib.request proxies_pool = [ {'http':'118.24.219.151.16817'}, {'http':'118.24.219.151.16817'}, ] import random proxies = random.choice(proxies_pool) url = 'http://www.baidu.com/s?wd=ip' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36' } request = urllib.request.Request(url=url,headers=headers) handler = urllib.request.ProxyHandler(proxies=proxies) opener = urllib.request.build_opener(handler) response = opener.open(request) content = response.read().decode('utf-8') with open('daili.html','w',encoding='utf-8')as fp: fp.write(content)
标签:url,handler,request,爬虫,urllib,headers,opener 来源: https://www.cnblogs.com/ckfuture/p/16305227.html