类型错误:“字节”类型的对象不可 JSON 序列化

2024-01-10

我刚刚开始Python 编程。我想用scrapy创建一个机器人,它显示 类型错误:当我运行项目时,“字节”类型的对象不可 JSON 序列化。

import json
import codecs

class W3SchoolPipeline(object):

  def __init__(self):
      self.file = codecs.open('w3school_data_utf8.json', 'wb', encoding='utf-8')

  def process_item(self, item, spider):
      line = json.dumps(dict(item)) + '\n'
      # print line

      self.file.write(line.decode("unicode_escape"))
      return item

from scrapy.spiders import Spider
from scrapy.selector import Selector
from w3school.items import W3schoolItem

class W3schoolSpider(Spider):

    name = "w3school"
    allowed_domains = ["w3school.com.cn"]

    start_urls = [
        "http://www.w3school.com.cn/xml/xml_syntax.asp"
    ]

    def parse(self, response):
        sel = Selector(response)
        sites = sel.xpath('//div[@id="navsecond"]/div[@id="course"]/ul[1]/li')

    items = []
    for site in sites:
        item = W3schoolItem()
        title = site.xpath('a/text()').extract()
        link = site.xpath('a/@href').extract()
        desc = site.xpath('a/@title').extract()

        item['title'] = [t.encode('utf-8') for t in title]
        item['link'] = [l.encode('utf-8') for l in link]
        item['desc'] = [d.encode('utf-8') for d in desc]
        items.append(item)
        return items

追溯:

TypeError: Object of type 'bytes' is not JSON serializable
2017-06-23 01:41:15 [scrapy.core.scraper] ERROR: Error processing       {'desc': [b'\x
e4\xbd\xbf\xe7\x94\xa8 XSLT \xe6\x98\xbe\xe7\xa4\xba XML'],
 'link': [b'/xml/xml_xsl.asp'],
 'title': [b'XML XSLT']}

Traceback (most recent call last):
File  
"c:\users\administrator\appdata\local\programs\python\python36\lib\site-p
ackages\twisted\internet\defer.py", line 653, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
File "D:\LZZZZB\w3school\w3school\pipelines.py", line 19, in process_item
    line = json.dumps(dict(item)) + '\n'
File 
"c:\users\administrator\appdata\local\programs\python\python36\lib\json\_
_init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
File 
"c:\users\administrator\appdata\local\programs\python\python36\lib\json\e
ncoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
File  
"c:\users\administrator\appdata\local\programs\python\python36\lib\json\e
ncoder.py", line 257, in iterencode
    return _iterencode(o, 0)
File      
"c:\users\administrator\appdata\local\programs\python\python36\lib\
json\encoder.py", line 180, in default
    o.__class__.__name__)
  TypeError: Object of type 'bytes' is not JSON serializable

你正在创造那些bytes对象自己:

item['title'] = [t.encode('utf-8') for t in title]
item['link'] = [l.encode('utf-8') for l in link]
item['desc'] = [d.encode('utf-8') for d in desc]
items.append(item)

其中每一个t.encode(), l.encode() and d.encode()调用创建一个bytes细绳。不要这样做,将其保留为 JSON 格式来序列化它们。

接下来,你还犯了其他几个错误;您在不需要的地方编码太多。留给json模块和standard返回的文件对象open()调用来处理编码。

您也不需要转换您的items列出字典;它已经是一个可以直接进行 JSON 编码的对象:

class W3SchoolPipeline(object):    
    def __init__(self):
        self.file = open('w3school_data_utf8.json', 'w', encoding='utf-8')

    def process_item(self, item, spider):
        line = json.dumps(item) + '\n'
        self.file.write(line)
        return item

我猜您遵循的教程假定使用 Python 2,而您正在使用 Python 3。我强烈建议你找到一个不同的教程;它不仅是为过时的 Python 版本编写的,如果它提倡line.decode('unicode_escape')它正在教一些极其坏的习惯,这些习惯会导致难以跟踪的错误。我可以推荐你看看思考 Python,第二版 https://greenteapress.com/wp/think-python-2e/一本关于学习 Python 3 的免费好书。

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

类型错误:“字节”类型的对象不可 JSON 序列化 的相关文章

  • Python ImageTk.PhotoImage 使用 alpha 通道缓慢加载 png

    我编写了一个小程序来加载和显示图像 一切正常 直到我到达 示例中的 png 文件 shade png 显示这张小图片需要七七秒 PhotoImage 是否有错误或者我错过了一些 范围 这是我的示例代码 from PIL import Ima
  • 使用 Flask 从 Jinja 模板中的 settings.py 文件获取变量

    假设我有 settings py 文件 其中包含一堆常量 将来可能会更多 如何访问 Jinja 模板中的这些变量 Flask 会自动将您的应用程序的配置包含在标准上下文 http flask pocoo org docs templatin
  • swig char ** 作为指向 char * 的指针

    我在使用 swig 和 char 作为指向变量 char 的指针时遇到问题 而不是作为 char 的列表 我找不到将指针包装到 char 的方法 目的是将连接的结果写入指针引用的 char 中 以下是我的代码 文件指针 cpp includ
  • Pandas:根据其他多级列对最里面的列进行分组排序

    考虑下面的 df In 3771 df pd DataFrame A a 11 B b 11 C C1 C1 C2 C1 C3 C3 C2 C3 C3 C2 C2 D D1 D2 D1 D3 D3 D2 D4 D4 D1 D2 D3 E v
  • pandas:使用运算符链接过滤 DataFrame 的行

    大多数业务在pandas可以通过操作符链接来完成 groupby aggregate apply等 但我发现过滤行的唯一方法是通过普通的括号索引 df filtered df df column value 这没有吸引力 因为它需要我分配d
  • 在Python中将距离矩阵转换为成对距离列表[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设Python中有以下距离矩阵 0 1 2 3 0 0 1 4 8 1 1 0 3 7 2 4 3 0 3 3 8 7 3 0 我想
  • PySerial 和多个 Python 安装出现问题

    我的 Windows 7 计算机上有 Python 2 4 4 和 3 1 3 我想使用 PySerial 听说是内置的 所以我尝试了一下import serial在两个版本中 两者都造成了Import Error 然后我从以下位置下载了w
  • 在python中浏览ftp目录

    我正在尝试使用 ftplib 使用 Python 3 从 ftp 服务器下载多个文件夹 我有一个文件夹名称列表 它们都位于文件夹 root 中 问题是我不知道如何浏览它们 当我使用cwd我可以进入更深的目录 但是如何再次起来呢 我正在尝试得
  • 使用 selenium 在 python 中切换到弹出窗口

    如何在下面的 selenium 程序中切换到弹出窗口 我已经查找了所有可能的解决方案 但无法解决它们 请帮忙 from selenium import webdriver from splinter import Browser from
  • Web API 复杂参数属性均为 null

    我有一个 Web API 服务调用可以更新用户的首选项 不幸的是 当我从 jQuery ajax 调用中调用此 POST 方法时 请求参数对象的属性始终为 null 或默认值 而不是传入的值 如果我使用 REST 客户端调用相同的方法 我使
  • 如何使用 Tkinter 创建等宽网格列?

    如何强制 Tkinter 应用程序窗口中的列宽度相等 tkdocs网站声明如下 每列的宽度 或每行的高度 取决于列或行中包含的小部件的宽度或高度 这意味着当绘制用户界面并将其划分为行和列时 您无需担心每列或行的宽度相等 或高度 大概 TkD
  • Python:选择多个已安装模块版本之一

    在我的系统上 我多次安装了多个模块 举个例子 numpy 1 6 1安装在标准路径中 usr lib python2 7 dist packages 我有一个更新版本numpy 1 8 0安装于 local python lib pytho
  • Django 中同一个模型的多个多对多关系

    给定以下具有两个多对多关系的模型 class Child models Model name models CharField max length 80 class Foo models Model bar models ManyToMa
  • Anaconda (Python) - Windows 10 上的 Cmder 集成

    我在 Windows 10 64 位上通过 Anaconda 让 Cmder 使用 Python 时遇到了一些麻烦 我让 Anaconda 工作得很好 测试过用 matplotlib 绘制一些东西 它与 Anaconda Prompt 一起
  • 使用 pyinstaller 制作的可执行文件出现运行时错误

    所以我使用 Pygame 制作了一个游戏 现在我想用它制作一个可执行文件 首选独立可执行文件 所以我用它来制作可执行文件 pyinstaller onefile main py 编译顺利 但运行时出现错误 这是错误 Traceback mo
  • Django 1.6:如何在视图中访问静态文件

    我已经尝试过解决方案here https stackoverflow com questions 11721818 django get the static files url in view这对我不起作用 我正在为 Python 创建一
  • 从 s3 获取 ogg 轨道的长度而不下载整个文件

    如何在不下载整个文件的情况下获取 ogg 文件的播放长度 我知道这是可能的 因为 HTML5 标签和 VLC 都可以在加载 URL 后立即显示整个播放长度 而无需下载整个文件 有标题或我可以阅读的内容吗 也许甚至是比特率 我可以将其除以文件
  • vtkPythonAlgorithm 控制管道执行

    我正在尝试用 python 编写一个 vtk 过滤器ProjectDepthImage进行投影不是问题 它控制 vtk 管道的执行 基本上 我对 UserEvent 有一个回调 当用户在渲染窗口处于活动状态时按下 u 键时会触发该回调 这将
  • In 和 Out 属性在 .NET 中如何工作?

    我一直在尝试跨序列化数组AppDomain边界 使用以下代码 public int Read byte buffer int offset int count return base Read buffer offset count 作为猜
  • 媒体文件上的 404 - Django

    昨晚我将项目上传到 pythonanywhere com 我想在那里测试我的项目生产设置 在我允许的模型之一中用户上传JPG 团队徽标 上传过程运行良好 文件位于我的 MEDIA ROOT 中 问题是 当我尝试在模板中访问它 以将其显示在页

随机推荐

  • 聚合绑定模板共享错误

    当我在 SAPUI5 应用程序中使用 PlanningCalendar 控件时 出现以下错误 它不是我要销毁或重新创建的元素 而只是用于显示数据 因此 我认为我不需要担心这个错误 有什么办法可以摆脱它吗 为什么它会与计划日历一起出现 我使用
  • Heroku 部署错误:找不到模块 - 编译

    这与其他问题类似 但我将解释不同之处 和其他许多人一样 我有一个应用程序在我自己的服务器上运行良好 但是当我推送到 Heroku 时 出现以下错误 remote gt react scripts build remote remote mo
  • QML:通过父引用引用根窗口是不可靠的

    Qt QML 问题 使用 Qt 5 7 采用以下简单的 QML 程序 该程序显示垂直对齐的红色矩形和蓝色矩形 两个矩形的单击处理程序都尝试更改父宿主窗口的颜色 但有细微的差别 红色矩形通过 id 直接引用主窗口 根窗口 蓝色点击处理程序通过
  • lxml --pretty_print--写入文件问题

    我正在将原始数据写入xml文件python程序 在我的设计中 我们逐行获取原始数据 然后将其写入xml文件中 例如
  • PHP html_entity_decode 未按预期解码实体?

    在下面的代码中 string1 function doesn apos t work as expected string2 html entity decode string1 string2 仍然包含 apos 调用 html enti
  • AngularJS Batarang - 什么是拦截表达式?

    我目前正在使用 AngularJS 1 3 0 稳定版本和 Batarang Chrome 扩展 在监视树中 我注意到在我的许多范围下都有一个称为 interceptedExpression 的东西 那是什么或者什么场景创建了拦截表达式 W
  • MySQL Workbench - 架构与数据库相同吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试为 php 代码设置数据库
  • Powershell 脚本不通过计划任务运行

    我的域控制器上有一个小脚本 设置为通过 SMTP 向我发送有关最新安全事件 4740 的电子邮件 该脚本在手动执行时将按预期运行 但是 当设置为通过计划任务运行时 尽管它显示已执行 但什么也没有发生 没有电子邮件 脚本如下 If NOT S
  • 全局变量的 JavaScript 提升

    我想知道 javascript 提升如何用于全局变量 假设我有以下代码片段 var a 5 function print console warn a a b var a 10 b 5 console warn a a print 在这种情
  • 如何获取数组中的唯一值[重复]

    这个问题在这里已经有答案了 如何获取数组中唯一值的列表 我是否总是必须使用第二个数组 或者 JavaScript 中是否有类似于 java 的 hashmap 的东西 我将要使用JavaScript and jQuery仅有的 不能使用额外
  • 在 Haxe 中使用对象作为 Map 键

    我正在尝试做一个Map以一个对象作为键 问题是 当我尝试从这张地图中获取元素时 我总是得到null 这是因为我没有提供与密钥完全相同的参考 我正在提供一个具有相同的对象values 所以参考不同 有什么办法可以解决吗 我可以让它使用某种eq
  • wget:检查文件时间戳并覆盖[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我怎样才能得到wget去做这个 从某个位置下载文件x 仅当文件的本地副本的时间戳早于该文件的时间戳时x 这意味着 仅当存在文件的较新版本时 它才应从给
  • 从 16 位硬件寄存器读取

    在嵌入式系统上 我们有一个设置 允许我们通过命令行界面读取任意数据以用于诊断目的 对于大多数数据 这工作得很好 我们使用memcpy 将数据复制到请求的地址并通过串行连接将其发送回 然而 对于 16 位硬件寄存器 memcpy 导致一些问题
  • Linkedin iOS SDK:当个人资料照片为空时,授权屏幕上的样式错误

    我们使用 LinkedIn sdk 授权 iOS 移动应用程序访问用户的 LinkedIn 个人资料 应用程序是使用 Xamarin 制作的 本机 LinkedIn sdk 已绑定 因此它应该以相同的方式工作 如果LinkedIn头像为空
  • 使用正则表达式拆分驼峰式字符串

    我有一个像这样的驼峰式字符串s ThisIsASampleString 我想使用大写字母作为分隔点分成一个数组 我期待这个 This Is A Sample String 这是我到目前为止所做的 s ThisIsASampleString
  • ASP.NET Web API 中的用户身份验证

    我需要开发一个 iPhone 客户端来使用来自某处的 JSON 数据 我选择了 MS 的 Web API 因为它看起来很简单 但在验证用户身份时 事情变得非常令人沮丧 我很惊讶我无法找到一个清晰的示例来说明如何从登录屏幕到使用Authori
  • 从应用程序内部重新安装 iPhone 应用程序

    我想找到一种方法 是否可以从里面重新安装 iPhone 应用程序 假设我的用户已经在手机中安装了该应用程序 现在发布了新版本 我可以制作我的应用程序 以便它可以通过互联网检查新版本是否可用 如果有 则下载它并要求用户安装它 如果用户同意 它
  • 如何让精灵坐在移动的精灵上

    如何让精灵坐在移动的精灵上并与其一起旅行 我已经让红色盒子随着冲动而跳跃 当它落到正在移动的黑色块上时 红色盒子会保持原状 掉落时会滑动移动物体 就像没有摩擦力一样 在重力 摩擦力均为 1 0 的情况下 两者甚至尝试增加质量 但没有任何效果
  • 如何为 TypeScript 文件创建模板?

    我有以下内容 function Opens a new modal window param object options an object with any of the following options return object
  • 类型错误:“字节”类型的对象不可 JSON 序列化

    我刚刚开始Python 编程 我想用scrapy创建一个机器人 它显示 类型错误 当我运行项目时 字节 类型的对象不可 JSON 序列化 import json import codecs class W3SchoolPipeline ob