urllib.request构建请求对象(写入UA)

简介: urllib.request构建请求对象(写入UA)

request模块可以通过get()方法传入headers参数,urllib.request.urlopen()却没有此参数。

import urllib.request
req = urllib.request.urlopen(url,headers=headers) # 会报错
# TypeError: urlopen() got an unexpected keyword argument 'headers',urlopen()不支持urse-agent

因此,使用urllib.request.urlopen()访问通常要先构建请求对象。

import urllib.request
# 设置好url,以百度为例
url = 'https://www.baidu.com'

# 1. 创建请求对象,构建并写入请求头user-agent
headers = {
    
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}
# 使用Reauest方法
req = urllib.request.Request(url, headers=headers)  # 先构建请求对象

# 2. 获取响应对象
# 发请求,response为响应对象
response = urllib.request.urlopen(req)  # 获取响应对象(urllib的响应对象),这里传入的不再是url,而是构建好的请求对象

# print(response.read()) # 这里读取到的是乱码
html = response.read().decode('utf-8')  # 解码

print(html)  # 打印出源码

# print(response)
# print(response.read())
print(response.getcode())  # 200 获取状态码,代表请求成功
print(response.geturl())  # 请求的url地址 返回实际数据的url,可以防止重定向问题。

结果不再展示。

相比而言,使用requests库则简洁的多

import requests

url = 'https://www.baidu.com'

headers = {
    
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
}

# 开始请求
html = requests.get(url, headers=headers)
# print(html)  # 打印出 <Response [200]>  得到响应码,200表示请求成功
print(html.content.decode('utf-8'))  # 类似十六进制数,是字节流
# print(html.text)  # 打印出乱码
'''
html.content:直接从网站上面直接抓取数据,没有做任何处理,没有做任何解码
html.text 是requests模块将html.content解码后得到的字符串,翠玉此解码过程,requests库会猜一个解码方方式,如果没有猜对,则会出现乱码,需要手动指定一个编码encoding。所以一般不用text属性,而是直接对content使用decode()方法,参数常设置为“utf-8”。
'''
>
目录
相关文章
|
缓存 网络协议 数据可视化
WinSCP下载安装并实现远程SSH本地服务器上传文件
WinSCP下载安装并实现远程SSH本地服务器上传文件
827 1
|
JSON 监控 算法
TIDE.JS:三维空间数字化渲染引擎
为了满足我们三维空间渲染各个业务的需求,并且提供易用SDK方便第三方开发人员快速搭建自己的应用或平台,我们自研了TIDE.JS——一款组件化、轻量化、高性能、大规模的面向空间数字化应用的渲染引擎。
4034 0
TIDE.JS:三维空间数字化渲染引擎
|
SQL 存储 分布式计算
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
1864 0
|
应用服务中间件 Linux 网络安全
linux下查找nginx.conf文件路径的方法
nginx.conf文件在哪?云吞铺子介绍Linux系统下查找nginx.conf配置文件的方法。 查找nginx.conf 1、SSH连接Linux服务器,命令:ssh root@你的服务器IP 2、执行命令:nginx -t回车,即可看到nginx.conf文件所在目录 3、cd进入目录,vi nginx.conf编辑nginx.conf文件即可。
8782 0
npm run dev启动报错:Error: Cannot find module 'semver'
npm run dev启动报错:Error: Cannot find module 'semver'
484 0
|
存储 缓存 数据可视化
(七)解析Streamlit的数据元素:探索st.dataframe、st.data_editor、st.column_config、st.table、st.metric和st.json的神奇之处(上)
(七)解析Streamlit的数据元素:探索st.dataframe、st.data_editor、st.column_config、st.table、st.metric和st.json的神奇之处
6624 0
|
SQL 运维 监控
Nest.js 实战 (十):使用 winston 打印和收集日志记录
这篇文章介绍了在Nest服务中如何使用Winston记录日志。文章首先强调了日志记录在后台服务中的重要性,接着提到Nest默认的内部日志记录器,并指出可以通过@nestjs/common包中的Logger类来全面控制日志系统的行为。文章还提到,为了在生产环境中实现更高级的日志功能,可以使用如Winston之类的Node.js日志包。接下来,文章介绍了如何在Nest服务中使用Winston记录日志,包括安装相关依赖、创建winston配置文件以及实现简单的日志记录示例。最后,文章指出更高级的自定义日志功能需要读者自己去探索。
581 0
Nest.js 实战 (十):使用 winston 打印和收集日志记录
|
8月前
|
机器学习/深度学习 文字识别 测试技术
Qwen2.5-VL-32B: 更聪明、更轻量!
年前,阿里通义千问团队推出了 Qwen2.5-VL 系列模型,获得了社区的广泛关注和积极反馈。在 Qwen2.5-VL 系列的基础上,研究团队使用强化学习持续优化模型,并使用 Apache 2.0 协议开源 32B 这个备受喜爱的参数规模的新 VL 模型—— Qwen2.5-VL-32B-Instruct。相比此前发布的 Qwen2.5-VL 系列模型,本次推出的 32B 模型的特点如下:
3097 0
|
缓存 Shell iOS开发
修改 torch和huggingface 缓存路径
简介:本文介绍了如何修改 PyTorch 和 Huggingface Transformers 的缓存路径。通过设置环境变量 `TORCH_HOME` 和 `HF_HOME` 或 `TRANSFORMERS_CACHE`,可以在 Windows、Linux 和 MacOS 上指定自定义缓存目录。具体步骤包括设置环境变量、编辑 shell 配置文件、移动现有缓存文件以及创建符号链接(可选)。
3582 2
|
关系型数据库 MySQL Linux
在Linux系统上实现高效安装与部署环境的全方位指南
在Linux系统上实现高效安装与部署环境的全方位指南
949 2