为了账号安全,请及时绑定邮箱和手机立即绑定

不符合 Python 变量限制的 Scrapy 字段名称

不符合 Python 变量限制的 Scrapy 字段名称

白衣染霜花 2023-03-30 09:41:55
是否可以有不符合python变量命名规则的字段名?详细说明,是否可以在导出文件中将字段名称作为“职位”而不是“job_title”。虽然在 JSON 或 XML 导出中可能没有用,但在以 CSV 格式导出时这种功能可能很有用。例如,如果我需要使用此数据导入到另一个系统,该系统已配置为接受具有特定字段名称的 CSV。试图阅读 Item Pipelines 文档,但它似乎是针对“一个项目已被蜘蛛抓取”而不是针对字段名称本身(尽管可能是完全错误的)。在这个方向上的任何帮助都会非常有帮助!
查看完整描述

1 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

我建议您使用名为scrapy-jsonschema. 有了它,您可以像这样定义您的项目:


from scrapy_jsonschema.item import JsonSchemaItem


class MyItem(JsonSchemaItem):

    jsonschema = {

        "$schema": "http://json-schema.org/draft-04/schema#",

        "title": "MyItem",

        "description": "My Item with spaces",

        "type": "object",

        "properties": {

            "id": {

                "description": "The unique identifier for the employee",

                "type": "integer"

            },

            "name": {

                "description": "Name of the employee",

                "type": "string"

            },

            "job title": {

                "description": "The title of employee's job.",

                "type": "string",


            }

        },

        "required": ["id", "name", "job title"]

    }

并像这样填充它:


item = MyItem()

item['job title'] = 'Boss'

您可以在此处阅读更多信息。


该解决方案按照您的要求处理 Item 定义,但您无需定义 Item即可获得类似的结果。例如,您可以将数据抓取到字典中并将其返回给 scrapy。


yield {

    "id": response.xpath('...').get(),

    "name": response.xpath('...').get(),

    "job title": response.xpath('...').get(),

}

这样scrapy crawl myspider -o file.csv就可以抓取到一个 csv 中,并且列将具有您选择的名称。


您也可以让蜘蛛直接写入 csv,或者它的管道等。有几种方法可以在没有 Item 定义的情况下完成。


查看完整回答
反对 回复 2023-03-30
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信