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

Scrapy Field Names that are not as per Python variable restrictions

是否可以有不符合python变量命名规则的字段名?详细地说,是否可以在导出文件中将字段名称作为“职位”而不是“job_title”。虽然在 JSON 或 XML 导出中可能没有用,但在以 CSV 格式导出时此类功能可能很有用。例如,如果我需要使用此数据导入到另一个已配置为接受具有特定字段名称的 CSV 的系统。

试图阅读 Item Pipelines 文档,但它似乎是针对“一个项目已被蜘蛛抓取”而不是针对字段名称本身(尽管可能是完全错误的)。

这方面的任何帮助都会非常有帮助!

我建议您使用名为 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'

您可以阅读有关 here 的更多信息。

此解决方案按照您的要求解决了 Item 定义,但您可以在不定义 Item 的情况下获得类似的结果。例如,您可以将数据抓取到字典中并将其返回给 scrapy。

yield {
    "id": response.xpath('...').get(),
    "name": response.xpath('...').get(),
    "job title": response.xpath('...').get(),
}

with scrapy crawl myspider -o file.csv 将抓取到 csv 中,列将具有您选择的名称。

您也可以让蜘蛛直接写入 csv,或者它的管道等。有几种方法可以在没有项目定义的情况下做到这一点。