urllib.request.urlopen(req).read().decode解析http报文报“utf-8 codec can not decode”错处理

2023-10-27

老猿前期执行如下代码时报“‘utf-8’ codec can’t decode byte”错,代码及错误信息如下:

>>> import urllib.request
>>> def mkhead():
    header = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
    'Accept-Encoding':'gzip',
    'Accept-Language':'zh-CN,zh;q=0.9',
    'Connection':'keep-alive',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'}
        
    return header

>>> def readweb(site):
    header = mkhead()
    try:
        req = urllib.request.Request(url=site,headers=header)
        text = urllib.request.urlopen(req).read().decode()
    except Exception as e:
        print(e)
        return None
    else:return text

    
>>> readweb(r'https://blog.csdn.net/LaoYuanPython')
'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
>>>

才开始以为是decode编码的问题,试了gbk等方式还是不行,最后发现是因为http请求报文头“‘Accept-Encoding’:‘gzip’”导致服务器返回的报文压缩了,把这个报文头信息去掉再执行就ok了,如下:

>>> import urllib.request
>>> def mkhead():
    header = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
    'Accept-Language':'zh-CN,zh;q=0.9',
    'Connection':'keep-alive',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'}
        
    return header

>>> def readweb(site):
    header = mkhead()
    try:
        req = urllib.request.Request(url=site,headers=header)
        text = urllib.request.urlopen(req).read().decode()
    except Exception as e:
        print(e)
        return None
    else:return text

    
>>> readweb(r'https://blog.csdn.net/LaoYuanPython')
Squeezed text(273 lines)
>>> readweb(r'https://blog.csdn.net/LaoYuanPython')[0:100]
'<!DOCTYPE html>\n<html lang="zh-CN">\n<head>\n    <meta charset="UTF-8">\n    <link rel="canonical" href'
>>>

如果希望处理压缩报文,请参考《第14.7节 Python模拟浏览器访问实现http报文体压缩传输》。
老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython

老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036
请大家多多支持,点赞、评论和加关注!谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

urllib.request.urlopen(req).read().decode解析http报文报“utf-8 codec can not decode”错处理 的相关文章

  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • C语言_宏定义

    一 预处理 编译一个C语言程序的第一步骤就是预处理阶段 这一阶段就是宏发挥作用的阶段 C预处理器在源代码编译之前对其进行一些文本性质的操作 主要任务包括删除注释 插入被 include进来的文件内容 定义和替换由 define 定义的符号以
  • ubuntu18.04安装minikube

    我是在root目录下安装的所以 不用输入sudo 关闭防火墙 查看防火墙当前状态 ufw status 关闭防火墙 ufw disable 或 systemctl stop firewalld systemctl disable firew
  • JavaScript Promise 的真正工作原理

    Promise 是处理异步代码的一种技术 也称为脱离回调地狱的头等舱门票 3 承诺状态 待定状态 已解决状态 拒绝状态 理解 JavaScript Promis 什么是承诺 通常 承诺被定义为最终可用的值的代理 Promise 多年来一直是
  • Error 405 HTTP method POST is not supported by this UR

    仔细看错误码 虽然报错报了一个405其实 返回的null 导致的 Error 405 HTTP method POST is not supported by this URL HTTP ERROR 405 Problem accessin
  • C# 遍历键值对获取某个键值对的下标

    Dictionary
  • 错题记录:C语言-全局变量初始化及sizeof返回值

    全局变量 没有给初始值时 编译其会默认将其初始化为0 sizeof返回值为无符号整型 若传入的数据不是无符号整型 则会对其进行转换 eg include
  • 解决js中大数的问题

    大数的理解 就是由于数字太大了 然后js解析不了 不认识 就比如实际生活中 在双11的时候 我们知道淘宝一夜之间总购买量肯定是一个很大很大的金额 当我们前端碰到一个非常大的数字的时候 js可能会解析不了 JS中的安全数字 gt Number
  • TYPE-C接口的工作原理图文详解

    TYPE C接口的工作原理图文详解 发表于 2018 01 29 09 53 53 电子常识 关注 2016年 有一个名词在手机上非常火 几乎所有的旗舰手机都会提到这个名词 说到这 大家应该都够猜到这个名词就是 Type C 接口 其全称是
  • Loaded plugins: rhnplugin, security This system is not registered with RHN.

    本文参考自 http hi baidu com wang01ning item 9f2a1859975ad615abf6d767 在redhat中使用yum进行包管理时 遇到以下错误 root localhost Server yum in
  • “树形List“与“扁平List“互转(Java实现)

    背景 在平时的开发中 我们时常会遇到下列场景 公司的组织架构的数据存储与展示 文件夹层级的数据存储与展示 评论系统中 父评论与诸多子评论的数据存储与展示 对于这种有层级的结构化数据 就像是一棵树一样 在关系型数据库中 通常将一个个的节点信息
  • Apache Airflow --- Linux安装

    Apache Airflow Linux安装 1 Python Install 2 Mysql Install 3 Airflow Install 3 1 Run Locally 3 2 Pip3 install 3 2 Config My
  • QT多线程

    Qt多线程 1 QThread类 QThread类并不是代表一个新的线程 而是QT提供的一个接口 用于控制一个子线程 每个QThread的实例就代表着对一个新线程的一个控制类 对于第一次使用QT多线程的人 或许就会很迷惑很不适应 QThre
  • protobuf和protobuf-c的小试牛刀

    简介 一种更轻量的数据格式 protobuf protobuf的优点 更小 更快 更简单 支持多种编程语言 解析速度快 可扩展性强 区别 主要不含两个功能 因为protobuf支持的语言还不够完善 所以有一些语言并不在这个仓库中 所以需要下
  • [优化篇]OpenStack的Cinder后端存储技术——GlusterFS(2)

    上一篇我们已经创建了GlusterFS集群 接下来就是我们怎么在Cinder后端来添加GlusterFS存储 其实熟悉了前面介绍的添加NFS的朋友 在参考GlusterFS其实是一样的 我们只需要修改cinder的配置文件即可 1 在计算节
  • Mysql SQL分析优化

    慢SQL诱因 无索引 索引失效 锁等待 InnoDB支持行锁 MyISAM支持表锁 InnoDB支持行锁更适合高并发场景 但行锁有可能会升级为表锁 一种情况是在批量更新时 行锁是基于索引加的锁 如果在更新操作时 条件索引失效 那么行锁会升级
  • Linux环境下安装JDK

    1 windows主机先下载好jdk for linux 再通过FTP传输到虚拟机centos6 5 2 在虚拟机上对JDK压缩文件进行解压缩 命令 tar xzvf jdk 8u181 linux x64 tar gz C usr loc
  • 文件转base64

    1 根据URL下载文件 pdf 图片 并转换为Base64 package com jiayou peis official account biz utils import org apache commons io IOUtils im
  • 2023 IntelliJ IDEA下载、安装教程, 附详细图解

    文章目录 下载与安装IDEA 推荐阅读 下载与安装IDEA 首先先到官网下载最新版的IntelliJ IDEA 下载后傻瓜式安装就好了 官网下载地址 https www jetbrains com 1 下载完后在本地找到该文件 双击运行 i
  • 手把手教你实现一个JavaWeb项目:创建一个自己的网页博客系统(前端+后端)(一)

    一篇博客带你实现一个真正的项目 先来看看它是什么样式的 目录 1 大体步骤 1 创建Maven项目 2 引入依赖 3 创建必要的目录 4 编写代码 5 打包部署 基于SmartTomcat 6 在浏览器验证 2 具体代码实现 1 V 用户界
  • urllib.request.urlopen(req).read().decode解析http报文报“utf-8 codec can not decode”错处理

    老猿前期执行如下代码时报 utf 8 codec can t decode byte 错 代码及错误信息如下 gt gt gt import urllib request gt gt gt def mkhead header Accept