当前位置: 首页 > news >正文

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

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

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

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

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

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

代码应用示例

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.lryc.cn/news/486607.html

相关文章:

  • 11.12机器学习_特征工程
  • RAG经验论文《FACTS About Building Retrieval Augmented Generation-based Chatbots》笔记
  • 【配置后的基本使用】CMake基础知识
  • ollama+springboot ai+vue+elementUI整合
  • 【项目开发】理解SSL延迟:为何HTTPS比HTTP慢?
  • 2.STM32之通信接口《精讲》之USART通信
  • Bootstrap和jQuery开发案例
  • Qt 之 qwt和QCustomplot对比
  • 【STM32】MPU6050简介
  • Oracle 单机及 RAC 环境 归档模式及路径修改
  • 抽象java入门1.5.3.1——类的进阶
  • python——模块 迭代器 正则
  • QT仿QQ聊天项目,第三节,实现聊天界面
  • Linux-何为CentOS
  • C++中的 std::optional
  • 猫狗识别之BUG汇总
  • 【论文复现】自动化细胞核分割与特征分析
  • 排序算法 -快速排序
  • K8S 查看pod节点的磁盘和内存使用情况
  • 华为HCIP——MSTP/RSTP与STP的兼容性
  • AI 大模型如何重塑软件开发流程:现状与未来展望
  • 3步实现贪吃蛇
  • 华东师范大学数学分析第五版PDF习题答案上册及下册
  • MySQL之联合查询
  • [C/C++] 定位新表达式 placement new
  • 【MySQL】MySQL的笛卡尔积现象是什么?简单说说
  • 《InsCode AI IDE:编程新时代的引领者》
  • 微搭低代码私有化部署搭建教程
  • 【在Linux世界中追寻伟大的One Piece】多路转接epoll(续)
  • 【不写for循环】玩玩行列