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.mzph.cn/news/211612.shtml

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

相关文章

18 Java与redis集群的通信

1、引入依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.6.3</version></dependency>2、配置 # Redis集群服务器地址 redis.nodesaliyun:6900,aliyun:6901,aliyun:6902,aliyun…

20道计算机网络面试题

网络分层 1、说说OSI 七层、TCP/IP 四层的关系和区别&#xff1f; OSI 七层从下往上依次是&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。一张图给你整明白&#xff1a; TCP/IP 四层从下往上依次是&#xff1a;网络接口层、网络层、传输层、应用…

MATLAB - 评估拟合优度、评价拟合效果

系列文章目录 文章目录 系列文章目录前言一、如何评估拟合优度二、拟合优度统计2.1 SSE - 误差引起的平方和2.2 R 平方2.3 自由度调整 R 平方2.4 均方根误差 三、MATLAB - 评估曲线拟合度3.1 加载数据并拟合多项式曲线3.2 绘制拟合方程、数据、残差和预测范围图3.3 评估指定点3…

java--Object

1.Object类的作用 Object类是java中所有类的祖宗类&#xff0c;因此&#xff0c;java中所有类的对象都可以直接使用Object类中提供一些方法 2.Object类的常见方法 ①toString存在的意义&#xff1a;toString()方法存在的意义就是为了被子类重写&#xff0c;以便返回对象具体的…

【Python实战系列】一文彻底搞懂异常捕获及处理(理论+源码)

一、问题 异常处理是Python中一种用于处理程序运行时错误的机制。在编写代码时&#xff0c;可能会出现各种不可预测的情况&#xff0c;例如除零错误、文件不存在、网络连接问题等等。为了确保程序能够在出现错误时正常运行&#xff0c;您可以使用异常处理机制来捕获和处理这些异…

K8S学习指南(5)-k8s核心对象namespace

文章目录 前言什么是Namespace&#xff1f;Namespace的类型创建Namespace使用kubectl创建Namespace示例 切换Namespace查看Namespace在Namespace中部署应用程序使用Namespace进行资源隔离Namespace的权限控制删除Namespace总结 前言 Kubernetes&#xff08;简称K8s&#xff09…

前端知识(十六)——js获取时间戳方法

1、获取当前时间 let date new Date() 2、将字符串或者对象直接转化成时间戳 方法&#xff1a;Date.parse() 注意&#xff1a;不推荐这种方法&#xff0c;毫秒级别的数值被转化为000 3、通过valueOf()函数返回指定的原始值获得精准的时间戳值 方法&#xff1a;valueOf()…

git自动更新功能

确认权限 因为一般Linux系统网页用的www 或 www-data用户和用户组,所以要实现自动来去,首先要在www用户权限下生成ssh密钥,不然没有权限,其次就是,要把用root用户拉去的代码,批量改成www用户 1. 给www权限 vi /etc/sudoers www ALL=(ALL) NOPASSWD:/bin/chow…

memset的用法

语法 1.引用所需头文件 #include<string.h> 2.声明 void * memset ( void * ptr, int value, size_t num ); ptr 表示要设置的数据的起始地址。如果是要设置整个数组的数据&#xff0c;那ptr就是数组名&#xff08;数组首元素的地址&#xff09; value 表示要设置的值…

【学习笔记】lyndon分解

摘抄自quack的ppt。 这部分和 s a sa sa的关联比较大&#xff0c;可以加深对 s a sa sa的理解。 Part 1 如果字符串 s s s的字典序在 s s s以及 s s s的所有后缀中是最小的&#xff0c;则称 s s s是一个 lyndon \text{lyndon} lyndon串。 lyndon \text{lyndon} lyndon分解&a…

c++ 类和对象-封装意义一

属性和行为作为整体 示例一&#xff1a;设计一个圆类&#xff0c;求圆的周长 #include<iostream> using namespace std; //圆周率 const double PI 3.14; //设计一个圆类&#xff0c;求圆的周长 //圆求周长的公式&#xff1a;2*PI*半径 //class代表设计一个类&#xf…

熔池处理Tecplot 360 和CFD-Post做出一样的效果

熔池处理Tecplot 360 和CFD-Post做出一样的效果 效果展示详细讲述Tecplot 360实现过程分析实现过程第一步实现过程第二步界面美化注意点效果展示 详细讲述Tecplot 360实现过程 分析 这里主要是将体积分数大于0.5的区域抽取出来,然后显示温度场,所以这里主要考虑下面连个思考…

PCL 三维点云中求解圆的三维方程

一、概述 在给出的三维点云中求解拟合圆的三维方程 二、代码示例 #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/sample_consensus/ransac.h> #include <pcl/sample_consensus/sac_model_circle3D.h> // 拟

【贪心算法】 Opponents

这道题写伪代码就好了&#xff01; Description Arya has n opponents in the school. Each day he will fight with all opponents who are present this day. His opponents have some fighting plan that guarantees they will win, but implementing this plan requires pr…

【开源】基于Vue+SpringBoot的固始鹅块销售系统

项目编号&#xff1a; S 060 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S060&#xff0c;文末获取源码。} 项目编号&#xff1a;S060&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 鹅块类型模块2.3 固…

Mybatis-plus中wrapper的区别

在MyBatis-Plus框架中,LambdaQueryWrapper 和 QueryWrapper 是用于构建查询条件的两个主要类。它们都是查询条件构造器,用于在查询中生成 WHERE 子句的条件。 QueryWrapper QueryWrapper 是 MyBatis-Plus 3.x 中引入的条件构造器。它的主要特点是使用字符串作为字段名,并支…

python 数字保留小数位数 结果是字符串

precision 2 f{px :.{precision}f} # 自定义动态 f{x:.2f} 数字 转 字符串 保留dot后面的位数 结果 字符串

从关键新闻和最新技术看AI行业发展(2023.11.20-12.3第十一期) |【WeThinkIn老实人报】

Rocky Ding 公众号&#xff1a;WeThinkIn 写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术&#xff0c;同时Rocky会对这些关键信息进行解读&#xff0c;力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议&#xff0c;一起交流学习&…

MySQL概述-安装与启动

数据库相关概念 MySQL数据库 下载地址 MySQL :: Download MySQL Installer (Archived Versions) 启动方法 启动密令&#xff1a;net start mysql80 停止密令&#xff1a;net stop mysql80 客户端链接方法 注意用系统自带的命令行工具执行指令需要设置环境在高级系统设置中…

解决使用pnpm安装时Sharp模块报错的方法

在使用pnpm进行项目依赖安装的过程中&#xff0c;有时候会遇到Sharp模块报错的情况。Sharp是一个用于处理图像的Node.js模块&#xff0c;但它的安装可能会因为各种原因而失败&#xff0c;导致项目无法正常启动。本文将介绍这个问题的方法。 问题描述 解决方法 在命令行分别输…