1 回答
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 定义的情况下完成。
添加回答
举报