gpt4 book ai didi

python - 不可 JSON 序列化的项目的管道

转载 作者:行者123 更新时间:2023-12-01 04:10:54 26 4
gpt4 key购买 nike

我正在尝试将抓取的 xml 输出写入 json。由于项目不可序列化,抓取失败。

从这个问题来看,它建议您需要构建一个管道,未提供的答案超出了问题 SO scrapy serializer 的范围。

所以指的是scrapy docs它举例说明了一个示例,但是文档建议不要使用此示例

The purpose of JsonWriterPipeline is just to introduce how to write item pipelines. If you really want to store all scraped items into a JSON file you should use the Feed exports.

如果我去 feed 导出,就会显示

JSON

FEED_FORMAT: json Exporter used: JsonItemExporter See this warning if you’re using JSON with large feeds.

我的问题仍然存在,因为据我所知,是从命令行执行的。

scrapy runspider myxml.py -o ~/items.json -t json

但是,这会产生我打算使用管道来解决的错误。

TypeError: <bound method SelectorList.extract of [<Selector xpath='.//@venue' data=u'Royal Randwick'>]> is not JSON serializable

如何创建 json 管道来纠正 json 序列化错误?

这是我的代码。

# -*- coding: utf-8 -*-
import scrapy
from scrapy.selector import Selector
from scrapy.http import HtmlResponse
from scrapy.selector import XmlXPathSelector
from conv_xml.items import ConvXmlItem
# https://stackoverflow.com/a/27391649/461887
import json


class MyxmlSpider(scrapy.Spider):
name = "myxml"

start_urls = (
["file:///home/sayth/Downloads/20160123RAND0.xml"]
)

def parse(self, response):
sel = Selector(response)
sites = sel.xpath('//meeting')
items = []

for site in sites:
item = ConvXmlItem()
item['venue'] = site.xpath('.//@venue').extract
item['name'] = site.xpath('.//race/@id').extract()
item['url'] = site.xpath('.//race/@number').extract()
item['description'] = site.xpath('.//race/@distance').extract()
items.append(item)

return items


# class JsonWriterPipeline(object):
#
# def __init__(self):
# self.file = open('items.jl', 'wb')
#
# def process_item(self, item, spider):
# line = json.dumps(dict(item)) + "\n"
# self.file.write(line)
# return item

最佳答案

问题出在这里:

item['venue'] = site.xpath('.//@venue').extract

您刚刚忘记调用extract。将其替换为:

item['venue'] = site.xpath('.//@venue').extract()

关于python - 不可 JSON 序列化的项目的管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34972368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com