其他分享
首页 > 其他分享> > 爬虫_urllib_handler处理器

爬虫_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