当前位置: 代码网 > it编程>前端脚本>Python > Python自动检测requests所获得html文档的编码

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

2024年11月19日 Python 我要评论
使用chardet库自动检测requests所获得html文档的编码使用requests和beautifulsoup库获取某个页面带来的乱码问题使用requests配合beautifulsoup库,可

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

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

使用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')
    
    # 要查找的 id
    target_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')
    
    # 要查找的 id
    target_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库,可以有效实现代码的自动检测。

以上就是python自动检测requests所获得html文档的编码的详细内容,更多关于python检测requests获得html文档编码的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com