urllib 异常、cookie、handler及代理(四)

目录

一、urllib异常 

二、urllib cookie登录

三、urllib handler 处理器的基本使用

四、urllib 代理和代理池

参考


一、urllib异常 

URLError/HTTPError

简介:

1.HTTPError类是URLError类的子类

2.导入的包urllib.error.HTTPError  urllib.error.URLError

3.http错误:http错误是针对浏览器无法连接到服务器而增加出来的错误提示。引导并告诉浏览者该页是哪里出了问题。

4.通过urllib发送请求的时候,有可能会发送失败,这个时候如果想让你的代码更加健壮,可以通过try-except进行捕捉异常,异常有两类URLError和HTTPError

完整代码:

# 异常
# URLError/HTTPErrorfrom urllib.error import URLError
from  urllib.error import HTTPError
import urllib.request# 正确url
# url = 'https://blog.csdn.net/m0_45447650/article/details/1342414341'# 地址错误
url = 'https://blog.csdn.net/m0_45447650/article/details/1342414341'
# 主机名错误
# url = 'https://blob.csdn.net/m0_45447650'
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76"
}
try:# 请求对象定制request = urllib.request.Request(url, headers = headers)# 获取网页源码response = urllib.request.urlopen(request)content = response.read().decode('utf-8')print(content)
except HTTPError:print('url地址写错了')
except URLError:print('url主机名错了')

二、urllib cookie登录

# 微博的cookie登录
# 应用场景: 数据采集时,绕开登录,进入到某个页面

完整代码:

# 微博的cookie登录
# 应用场景: 数据采集时,绕开登录,进入到某个页面# 个人信息界面是utf-8,但还是报编码错误,因为并没有进入到个人信息页面,而是跳转到登录页面,登录页面不是utf-8,所以报错。
# 什么情况下访问不成功,请求头的信息不够才会访问不成功
# refere :防盗链,判断当前路径是不是由上一个路径进来的,一般情况下是做图片的防盗链
import urllib.request
url = 'https://weibo.com/你的微博主页'
headers = {"User-Agent": "主页的UA",'Cookie':'主页的CK','Referer':'https://weibo.com/'
}
request = urllib.request.Request(url, headers = headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
with open ('weibo.html', 'w',encoding='utf-8') as file:file.write(content)

三、urllib handler 处理器的基本使用

 为什么要学handler?

urllib.request.urlopen(url)

       不能定制请求头

urllib.request.Request(url,header,data)

       可以定制请求头

handler

       定制更高级的请求头(随着业务逻辑的复杂,请求对象的定制已经满足不了我们的需求(动态cookie和代理不能使用请求对象的定制))

使用handler三步:

1.获取handler对象

2.获取opener对象

3.调用open方法

完整代码:

# 使用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/118.0.0.0 Safari/537.36 Edg/118.0.2088.76"
}# 请求对象定制
request = urllib.request.Request(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)

四、urllib 代理和代理池

 1.代理的常用功能?

(1).突破自身IP访问限制,访问国外站点

(2).访问一些单位或团体内部资源

扩展:某大学FTP(前提是该代理地址在该资源的允许访问范围之内),使用教育网内地址段免费代理股务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共亨等服务,

(3).提高访问速度

扩展: 通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度,

(4).隐感真实IP

扩展:上网者也可以通过这种方法隐藏自己的IP,免受攻击

2.代码配置代理

创建Reuqest对象

创建ProxyHandler对象

用handler对象创建opener对象

使用opener.open函数发送请求

使用handler模拟客户端向服务器发送请求

# handler build_opener open
handler = urllib.request.ProxyHandler(proxies=proxies)
opener = urllib.request.build_opener(handler)
response = opener.open(request)

设置一个简单的代理池

# 代理池
proxies_pool= [# 'key':'主机'+'端口号'{'http':'61.216.185.88:60808'},{'http':'182.140.244.163:8118'}
]
import random
proxies = random.choice((proxies_pool))

完整代码

import urllib.request
url = 'https://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/118.0.0.0 Safari/537.36 Edg/118.0.2088.76"
}# 请求对象定制
request = urllib.request.Request(url, headers=headers)
# response = urllib.request.urlopen(request)# 获取免费快代理 https://www.kuaidaili.com/free/
# 代理 ip 以字典的方式存在
proxies = {# 'key':'主机'+'端口号''http':'61.216.185.88:60808'
}"""
# 代理池
proxies_pool= [# 'key':'主机'+'端口号'{'http':'61.216.185.88:60808'},{'http':'182.140.244.163:8118'}
]
import random
proxies = random.choice((proxies_pool))
"""# handler build_opener open
handler = urllib.request.ProxyHandler(proxies=proxies)
opener = urllib.request.build_opener(handler)
response = opener.open(request)content = response.read().decode('utf-8')
print(content)
# with open ('weibo.html', 'w',encoding='utf-8') as file:
#     file.write(content)

参考

尚硅谷Python爬虫教程小白零基础速通(含python基础+爬虫案例)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257412.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最实用的UPS监控技巧,今天用一篇文章告诉你!

在现代信息技术高度依赖的环境中,机房扮演着至关重要的角色,而UPS(不间断电源)作为保障设备之一,对于确保数据中心和服务器系统的稳定运行至关重要。 为了更好地监控和管理UPS设备,提高机房设备的可靠性和稳…

做题笔记:SQL Sever 方式做牛客SQL的题目--查询每天刷题通过数最多的前二名用户

----查询每天刷题通过数最多的前二名用户id和刷题数 现有牛客刷题表questions_pass_record,请查询每天刷题通过数最多的前二名用户id和刷题数,输出按照日期升序排序,查询返回结果名称和顺序为: date|user_id|pass_count 表单创建…

数据清洗、特征工程和数据可视化、数据挖掘与建模的应用场景

1.5 数据清洗、特征工程和数据可视化、挖掘建模的应用场景 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解1.5节内容。本书已正式出版上市,当当、京东、淘宝等平台热销中,搜索书名即可。内容涵盖数据科学应…

灾备行业常用术语

在灾备(Disaster Recovery)行业中,有一些常用的术语和概念,这些术语通常涉及到数据保护、业务连续性和灾难恢复方面。以下是一些常见的灾备行业术语: 备份(Backup) 对数据的定期复制&#xff…

MTU TCP-MSS(转载)

MTU MTU 最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。 是包或帧的最大长度,一般以字节记。如果MTU过大,在碰到路由器时…

值得收藏!在线PDF转换网站,让你的文件转换更简单、更快捷!

你是否曾经因为PDF文件的格式问题而感到困扰?是否曾经因为无法快速转换PDF文件而感到烦恼? 现在,这些问题都可以迎刃而解了!下面这个在线PDF转换网站,就是你的解决方案。网站地址:https://fileprocess.shw…

zabbix 邮件报警

zabbix 邮件报警 Zabbix-报警功能(触发器/动作)可以监控 nginx 是否正常运行 可以微信报警和邮件报警 https://blog.csdn.net/zfw_666666/article/details/124708605 企业号注册地址:https://qy.weixin.qq.com/填写企业注册信息&#xff0c…

安卓NDK开发——常用数据std::string、jstring、cv::Mat、Bitmap互转

前言 在 Android NDK开发中,JNI可以在 Java 和本地代码(如 C、C)之间进行通信。JNI 提供了在 Android 应用中调用本地(C/C)代码的能力,并允许本地代码与 Java 代码相互交互。下面是在安卓上实现OCR时用到的…

Linux指令学习

目录 1.ls指令 2.pwd命令 3.cd 指令 4. touch指令 5.mkdir指令 6.rmdir指令 && rm 指令 7.man指令 8.cp指令 9.mv指令 10.cat指令 11.more指令 12.less指令 13.head指令 14.find指令: -name 15.grep指令 16.zip/unzip指令: 17.tar…

基于SpringBoot+Thymeleaf+Mybatis学生信息管理系统(源码+数据库)

一、项目简介 本项目是一套基于SpringBootThymeleafMybatis学生信息管理系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试…

Densely Connected Convolutional Networks(2018.1)

文章目录 Abstract1. Introduction提出问题以前的解决方法我们的方法效果 2. Related Work3. DenseNetsResNets.Dense connectivity.Composite function.Pooling layers.Growth rate.Bottleneck layers.Compression.Implementation Details. 4. Experiments5. DiscussionModel …

AI并行计算:CUDA和ROCm

1 介绍 1.1 CUDA CUDA(Compute Unified Device Architecture)是Nvidia于2006年推出的一套通用并行计算架构,旨在解决在GPU上的并行计算问题。其易用性和便捷性能够方便开发者方便的进行GPU编程,充分利用GPU的并行能力&#xff0…