爬虫_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)
复制代码
posted @   创客未来  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2021-05-24 Golang 错误处理
点击右上角即可分享
微信分享提示