python爬虫---urllib

urllib是Python的一个内置库,专门用于处理网络请求 。主要包含了四个模块:request、error、parse和robotparser。

# 1.导包
# 使用urllib来获取百度首页的源码
import urllib.request
# quote:将非ASCII字符转换为%XX格式,以便在URL中使用。应用场景:1个参数,get请求
# urlencode: 将非ASCII字符转换成对应的UTF-8编码格式,应用场景:多个参数,get请求
# import urllib.parse# 2.定义一个url
url = "url地址"# 如果有参数,需要把参数单独拿出来,再和原来的url拼接起来(适合get请求,post请求不能拼接),例如:
# data = urllib.parse.quote("周杰伦")
data = {"from": "en","to": "zh"
}
data = urllib.parse.urlencode("data")   # get请求不需要调用encode方法
# data = urllib.parse.urlencode("data").encode("utf-8")  # post请求需要调用encode方法url = url + data   # 适合get请求,post请求不能拼接(post的data直接写在请求对象的定制的data参数中)# 3. 解决反爬
headers={# 用户代理"User-Agent": "F12查看", # ---- 反爬1 # cookie中携带方你的登陆信息,如果有登陆之后的cookie,那么我们就可以携带芳cookie进入到任何页面"Cookie": "F12查看" ## ---- 反爬2 解决登录# 判断当前路径是不是由上一个路径进来的, 一般是做图片的防盗链"Referer":"https://weibo.com/7473392681"
}# 4.因为urlopen方法中不能存储字典,所以headers不能传递进去
# 请求对象的定制 ---- 解决反爬 User-Agent   -----post 请求的data需要写在参数里面
request = urllib.request.Request(url=url, headers=headers)   # get请求
# request = urllib.request.Request(url=url, data=data, headers=headers)   # post请求# 5.模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)# 6.获取响应的数据, 需要解码 decode()
content = response.read().decode("utf-8")
print(content)# 7.下载数据
with open("filename.后缀", "w", encoding="utf-8") as fp:  # 编码格式需要F12查看fp.write(content)# 下载网页
# urllib.request.urlretrieve(url=url_page, filename="filename.html")
# 下载图片
# urllib.request.urlretrieve(url=url_image, filename="lisa.jpg")
# 下载视频
# urllib.request.urlretrieve(url=url_video, filename="test.mp4")# response是HTTPResponse的类型
# read()              一个字节一个字节的去读
# readline()          读取一行
# readlines()         读取多行
# response.getcode()  返回状态码
# response.geturl()   返回url
response.getheaders() 返回状态信息# 异常:
# HttpError类是UrlError类的子类
# 导入的包urllib.error.HTTPErrorurllib.error.URLError
# http错误: http错误是针对浏览器无法连接到服务器而增加出来的错误提示。引导并告诉浏览者该页是哪里出了问题。
# 通过ur11ib发送请求的时候,有可能会发送失败,这个时候如果想让你的代码更加的健壮,可以通过try--except进行捕获异常,异常有两类,URLError\HTTPError
例如:
try:request = urllib.request.Request(url=url, headers=headers)response = urllib.request.urlopen(request)content = response.read().decode("utf-8")print(content)
except urllib.error.HTTPError:print("HTTPError")
except urllib.error.URLError:print("URLError")# 请求可能报错:
# 个人信息页面是utf-8,但是还报错了编码错误,因为并没有进入到个人信息页面,而是跳转到了登陆页面,那么登陆页面不是utf-8所以报错(可以F12看编码格式),想要绕过登录,然后进入到某个页面,可能需要用到cookie

get请求与post请求差异:

1.  参数:get请求可以拼接,且参数不需要编码;post请求不能拼接,且参数需要编码encode方法。

2.请求对象定制:get请求参数拼接在url里了;post参数请求参数需要单独放在请求对象定制Request方法里。

处理器Handler的使用:

Handler:定制更高级的请求头(随着业务逻辑的复杂请求对象的定制已经满足不了我们的需求(动态cookie和代理不能使用请求对象的定制),需要使用到 HTTPHandler、build_opener、open 三者一起使用

# 导包
import urllib.request
# url
url = "http://www.baidu.com"
# 请求头
headers = {# 用户代理"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 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方法,使用open发送HTTP请求
response = opener.open(request)
# 获取响应
content = response.read().decode("utf-8")
print(content)


代理服务器:ip被封后如何操作。1)短时间内高频次操作,会封ip,使用代理服务器。2)访问国外网址 3)访问内网 4) 提高访问速度  5)隐藏真实ip

import urllib.request
import randomurl = "https://ip.900cha.com/"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}request = urllib.request.Request(url=url,headers=headers)
# response = urllib.request.urlopen(request)  # 以下代码代替# 服务器地址和端口号
# proxies={
#     "http":"114.99.232.174:21753"
# }# 代理池
proxies_pool = [# {"http":"106.122.240.76: 18781"},# {"http":"115.219.4.132: 21306"},
]
proxies = random.choice(proxies_pool)
# print(proxies)# 传入代理服务器地址和端口号,以字典的类型存储
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)

cookie库:动态实现cookie

待更新......

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

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

相关文章

Mistral AI CEO宣布于2024年开源GPT-4级别模型

法国初创公司Mistral AI的首席执行官Arthur Mensch在法国国家广播电台宣布,公司计划于2024年开源GPT-4级模型,引发了业界的关注。 最近,Mistral AI推出了基于MoE架构的8X7B模型,与GPT3.5和Llama270B等其他流行模型相媲美&#xf…

leetcode --- 30. 串联所有单词的子串[C++ 滑动窗口/双指针]

原题:30. 串联所有单词的子串 - 力扣(LeetCode) 题目解析: 本题在这道题的算法原理基础上进行思考会简单许多 leetcode --- 438. 找到字符串中所有字母异位词[C/滑动窗口哈希表]-CSDN博客 关键信息---words中的字符串长度都相等 …

二叉树【数据结构】

目录 二叉树1. 二叉树定义二叉树的存储定义 2. 遍历二叉树(1) 前序遍历(2) 中序遍历(3) 后序遍历(4) 层序遍历 3. 二叉树的相关操作(1) 二叉树的初始化(2) 二叉树的结点的手动创建(3) 二叉树结点的个数(4) 二叉树叶子结点的个数(5) 二叉树的高度(6) 第k层结点个数(7) 通过前序遍…

豆袋市场分析:预计到 2026年将达到44 亿美元

几十年来,豆袋椅一直是一种流行的多功能座椅选择,近年来它们的市场持续增长。在本次分析中,我们将考 察全球豆袋市场和中国市场的发展趋势。 全球市场: 过去几年,全球豆袋市场一直在稳步增长。在住宅和商业空间中越来越…

科技巨头三巨头:百度、阿里巴巴、腾讯的崛起与角力

导言 百度、阿里巴巴、腾讯被誉为中国科技领域的“三巨头”,在搜索、电商、社交等多个领域取得了巨大成功。本文将深入探讨这三家公司的崛起原因、核心业务、战略布局以及彼此之间的竞争和合作关系。 1. 百度的搜索帝国 搜索引擎: 百度以其搜索…

Java 序列化机制详解

Java 序列化机制是一种将对象转换为字节流的过程,以便在网络上传输或保存到文件中,并能在需要时将字节流还原为对象。这一机制通过实现 java.io.Serializable 接口来实现,同时涉及到一些关键概念和注意事项。 Serializable 接口 Serializabl…

CCF编程能力等级认证GESP—C++4级—20230611

CCF编程能力等级认证GESP—C4级—20230611 单选题(每题 2 分,共 30 分)判断题(每题 2 分,共 20 分)编程题 (每题 25 分,共 50 分)幸运数图像压缩 答案及解析单选题判断题编程题1编程题2 单选题&…

Redis结合SpringBoot 基本使用

1.1 简介 1.1.1 概述 Spring Data 中有一个成员 Spring Data Redis,他提供了 RedisTemplate 可以在 Spring 应用中更简便的访问 Redis 以及异常处理及序列化,支持发布订阅等操作。 1.2 RedisTemplate 常见 API   RedisTemplate 针对 jedis 客户端中大…

深入探索COM技术:实现跨语言组件集成

com技术,如何c#界面嵌入到另一种语言界面 COM(Component Object Model)技术可以用于在不同编程语言之间共享和使用代码,包括在C#和其他语言创建的界面之间实现集成。若要将C#界面嵌入到用另一种语言(如C或VB&#xff…

开发知识点-09Rust

Rust Rust 语言通常用于编写系统级软件、网络服务器和高性能应用程序,它具有以下特点:1. 高性能和内存安全:Rust 在保证高性能的同时,利用其所有权模型和借用检查器等特性确保内存安全,避免了 C/C 等语言的内存错误和崩…

瑞友天翼应用虚拟化系统 多处SQL 注入漏洞复现(可RCE)

0x01 产品简介 瑞友天翼应用虚拟化系统是西安瑞友信息技术资讯有限公司研发的具有自主知识产权,基于服务器计算架构的应用虚拟化平台。它将用户各种应用软件集中部署在瑞友天翼服务器(群)上,客户端通过WEB即可快速安全的访问经服务器上授权的应用软件,实现集中应用、远程接…

Pytorch nn.Linear()的基本用法与原理详解及全连接层简介

主要引用参考: https://blog.csdn.net/zhaohongfei_358/article/details/122797190 https://blog.csdn.net/weixin_43135178/article/details/118735850 nn.Linear的基本定义 nn.Linear定义一个神经网络的线性层,方法签名如下: torch.nn.Li…

生日蜡烛C语言

分析&#xff1a;假设这个人只能活到100岁&#xff0c;如果不这样规定的话&#xff0c;那么这个人就可以假设活到老236岁&#xff0c;直接一次吹236个蜡烛&#xff0c;我们就枚举出所以情况&#xff0c;从一岁开始。 #include <stdio.h> int f(int a,int b){//计算从a到…

视频素材网站全新上线,海量高清视频等你来探索~

亲爱的视频制作爱好者们&#xff0c;好消息来啦&#xff01;我们的视频素材网站全新上线啦&#xff01;这次我们为大家带来了海量的高清视频素材&#xff0c;无论是风景、城市、人物、动物还是各种特效、背景等&#xff0c;应有尽有&#xff0c;满足您在视频制作过程中的各种需…

【神器】wakatime代码时间追踪工具

文章目录 wakatime简介支持的IDE安装步骤API文档插件费用写在最后 wakatime简介 wakatime就是一个IDE插件&#xff0c;一个代码时间追踪工具。可自动获取码编码时长和度量指标&#xff0c;以产生很多的coding图形报表。这些指标图形可以为开发者统计coding信息&#xff0c;比如…

【MySQL】:复合查询

复合查询 一.多表查询二.自连接三.子查询1.单行子查询2.多行子查询3.多列子查询4.在from语句里使用子查询5.合并查询 准备三张表 emp表 dept表 salgrade表 一.多表查询 实际开发中往往数据来自不同的表&#xff0c;所以需要多表查询。我们用一个简单的公司管理系统&#xff0c…

HPM6750系列--第十一篇 Uart讲解(轮询模式)

一、目的 在介绍完GPIO的相关内容下一个必须介绍的就是uart了&#xff0c;因为串口一个主要用途就是用于调试信息打印。 HPM6750在uart的配置上也是相当炸裂&#xff0c;有17个串口&#xff1b;结合HPM6750的高主频高内存&#xff0c;完全可以作为一个串口服务器。 ​​​​​​…

智能优化算法应用:基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.天牛须算法4.实验参数设定5.算法结果6.参考文…

MLOps在极狐GitLab 的现状和前瞻

什么是 MLOps 首先我们可以这么定义机器学习&#xff08;Machine Learning&#xff09;&#xff1a;通过一组工具和算法&#xff0c;从给定数据集中提取信息以进行具有一定程度不确定性的预测&#xff0c;借助于这些预测增强用户体验或推动内部决策。 同一般的软件研发流程比…

如何用 Redis 中的 HyperLogLog 统计页面 UV?

HyperLogLog&#xff08;HLL&#xff09;是 Redis 中一种用于基数估计的数据结构&#xff0c;适合用于统计唯一值&#xff08;Unique Values&#xff09;。在页面 UV 统计中&#xff0c;可以使用 HyperLogLog 来估算唯一访客的数量。以下是一个简单的示例&#xff1a; 安装 Red…