Python自动检测requests所获得html文档的编码

devtools/2024/11/18 7:25:44/

html_0">使用chardet库自动检测requests所获得html文档的编码

使用requestsBeautifulSoup库获取某个页面带来的乱码问题

使用requests配合BeautifulSoup库,可以轻松地从网页中提取数据。但是,当网页返回的编码格式与Python默认的编码格式不一致时,就会导致乱码问题。

以如下代码为例,它会获取到一段乱码的html

html" title=python>python">import requests
from bs4 import BeautifulSoup# 目标 URL
url = 'https://finance.sina.com.cn/realstock/company/sh600050/nc.shtml'# 发送 HTTP GET 请求
response = requests.get(url)# 检查请求是否成功
if response.status_code == 200:# 获取网页内容html_content = response.text# 使用 BeautifulSoup 解析 HTML 内容soup = BeautifulSoup(html_content, 'html.parser')# 要查找的 IDtarget_id = 'hqDetails'# 查找具有特定 ID 的标签element = soup.find(id=target_id)if element:# 获取该标签下的 HTML 内容element_html = str(element)print(f"ID 为 {target_id} 的 HTML 内容:\n{element_html}\n")# 查找该标签下的所有 table 元素tables = element.find_all('table')if tables:for i, table in enumerate(tables):print(f"第 {i+1} 个 table 的 HTML 内容:\n{table}\n")else:print(f"ID 为 {target_id} 的标签下没有 table 元素")else:print(f"未找到 ID 为 {target_id} 的标签")
else:print(f"请求失败,状态码: {response.status_code}")

非英语字符乱码
我们可以通过通过手工指定代码的方式来解决这个问题,例如在response.status_code == 200后,通过response.encoding = 'utf-8'指定代码,又或通过soup = BeautifulSoup(html_content, 'html.parser', from_encoding='utf-8') 来指定编码。

然而,当我们获取的html页面编码不确定的时候,有没有更好的办法让编码监测自动执行呢?这时候chardet编码监测库是一个很好的帮手。

使用 chardet 库自动检测编码

chardet 是一个用于自动检测字符编码的库,可以更准确地检测响应的编码。

安装chardet

pip install chardet

代码应用示例

html" title=python>python">import requests
from bs4 import BeautifulSoup
import chardet# 目标 URL
url = 'https://finance.sina.com.cn/realstock/company/sh600050/nc.shtml'# 发送 HTTP GET 请求
response = requests.get(url)# 检查请求是否成功
if response.status_code == 200:# 自动检测字符编码detected_encoding = chardet.detect(response.content)['encoding']# 设置响应的编码response.encoding = detected_encoding# 获取网页内容html_content = response.text# 使用 BeautifulSoup 解析 HTML 内容soup = BeautifulSoup(html_content, 'html.parser')# 要查找的 IDtarget_id = 'hqDetails'# 查找具有特定 ID 的标签element = soup.find(id=target_id)if element:# 获取该标签下的 HTML 内容element_html = str(element)print(f"ID 为 {target_id} 的 HTML 内容:\n{element_html}\n")# 查找该标签下的所有 table 元素tables = element.find_all('table')if tables:for i, table in enumerate(tables):print(f"第 {i+1} 个 table 的 HTML 内容:\n{table}\n")else:print(f"ID 为 {target_id} 的标签下没有 table 元素")else:print(f"未找到 ID 为 {target_id} 的标签")
else:print(f"请求失败,状态码: {response.status_code}")

解决了中文乱码问题
可见,通过使用chardet库,可以有效实现代码的自动检测。


http://www.ppmy.cn/devtools/134899.html

相关文章

【HOT100第四天】除自身以外数组的乘积,矩阵置零,螺旋矩阵,旋转图像

今天感觉是边界值练习专场。。。整体难度不大但是细节还是需要多动手写一写。 238. 除自身以外的数组的乘积 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意…

【C语言】连接陷阱探秘(2):命令冲突与static修饰符

目录 一、命令冲突 1.1. 常见情况及原因 1.1.1. 符号重定义冲突 1.1.2. 不同编译单元中静态函数调用冲突 1.2. 解决办法 1.3. 示例 二、static 修饰符的陷阱与缺陷 2.1. 变量方面的陷阱 2.1.1. 静态局部变量的初始化顺序问题 2.1.2. 静态全局变量的作用域误解 2.2. …

【AI图像生成网站Golang】项目架构

AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与调试(等待更新) 四、项目架构 本项目的后端基于Golang和Gin框架开发,主要包括的模块有: backend/ ├── …

第8章:TDengine 开发、测试、生产三大环境中数据库创建指南

TDengine 开发、测试、生产三大环境中数据库创建指南 TDengine3.0社区版在开发、测试、以及生产三大环境中数据库创建SQL语句以及相应参数的说明文档。 一、概述 TDengine3.0社区版是一款开源、高性能、云原生的时序数据库,支持SQL语法,并针对时序数据进行了优化。在开发、…

QT适配最新版Android SDK

从AndroidStudio的SDK管理下载最新版SDK 从https://www.androiddevtools.cn/下载国内安卓SKDTools 这里下载SKDTools后不需要使用SDK Manager.exe下载SDK(SDK Manager.exe下载的SDK都是旧版,没法支持新版本),直接使用从AndroidS…

web-02

回顾 full stack web前端 结构(html) 样式(css) 动作/交互(js) html html常用标签 扩展标签 列表 ul/ol u–un – 无序的 o-order --有顺序的 <ol> 你最喜欢的游戏是什么&#xff1f;<li>bar sleep</li><li>who knows</li> </ol>布…

Apache Doris:深度优化与最佳实践

引言 在前两篇文章中&#xff0c;我们已经介绍了 Apache Doris 的基本概念、安装配置、基础操作以及一些高级特性。本文将进一步深入探讨 Doris 的性能优化技巧、高级查询优化、数据建模最佳实践以及常见问题的解决方法。通过本文&#xff0c;读者将能够更好地理解和应用 Dori…

大语言模型LLM综述

一、LM主要发展阶段 1.1、统计语言模型SLM 基于统计学习方法&#xff0c;基本思想是基于马尔可夫假设HMM建立词概率预测模型。如n-gram语言模型 1.2、神经语言模型NLM 基于神经网络来做词的分布式表示。如word2vec模型 1.3、 预训练语言模型PLM 预训练一个网络模型来做词表…