Использование Scrapy У меня есть данные с сайта, который я хочу в json-форме, конечным результатом является то, что я хочу ПОСЛАТЬ эти данные в базу данных, используя rest api, поэтому он должен иметь определенные ключи в определенном форма.Scrapy json modifying array
Я пытаюсь получить данные в эту форму json; ЕДИНСТВЕННЫЙ массив может быть под атрибутом, все остальные должны быть от одного до одного ключей и значений.
{
"Event":{
"date":"2015-11-25",
"threat_level_id":"1",
"info":"TEST",
"analysis":"0",
"distribution":"0",
"orgc":"Malware, Inc",
"Attribute": [
{
"type":"md5",
"category":"Payload delivery",
"to_ids":true,
"distribution":"3",
"value":"35b759347aee663e36f5b91877749349"},
{"type":"url",
"category":"Network activity",
"to_ids":true,
"distribution":"3",
"value":"conf.f.360.cn"},
{
"type":"ip-dst",
"category":"Network activity",
"to_ids":true,
"distribution":"3",
"value":"1.1.1.1"}]
}
}
* В массиве "Атрибут" может быть несколько элементов. Проблема, которую я получаю, - я не могу создать массив «Атрибут» для нескольких объектов, я не уверен, как добавлять многоуровневые типы, которые похожи и содержат одни и те же «ключи».
Это не работает ...
def parse_items(self, response):
self.log("Hi, this is an item page! %s" % response.url)
item = Website()
item["date"] = "current date"
item["threat_level_id"] = "1"
item["info"] = "Malware"
item["analysis"] = 0
item["distribution"] = 0
item["orgc"] = "Malware"
item["Attribute"] = {}
item["Attribute"]['type'] = "ip-dst"
item["Attribute"]["category"] ="Network activity"
item["Attribute"]["to-ids"] = True
item["Attribute"]["distribution"] = "3"
item["Attribute"]['ip'] = response.xpath('//*[@id="contacted- hosts"]//tr[1]/td[1]/text()').extract()
item["Attribute"]['type'] = "domain"
item["Attribute"]["category"] ="Network activity"
item["Attribute"]["to-ids"] = True
item["Attribute"]["distribution"] = "3"
item["Attribute"]['domain'] = response.xpath('//*[@id="dns-requests"]//a/text()').extract()
item["Attribute"]['type'] = "md5"
item["Attribute"]["category"] ="Payload delivery"
item["Attribute"]["to-ids"] = True
item["Attribute"]["distribution"] = "3"
item["Attribute"]['md5'] = response.xpath('//*[contains(text(), "MD5")]/following-sibling::dd[1]/text()')[0].extract()
Это возвращает перемешивать как этот
[
[
[
{"info": "Website",
"orgc": "Malware",
"analysis": 0,
"Attribute": {"category": "Payload delivery",
"domain": ["anatolio69.no-ip.biz", "lucidspung.com", "swashsepal.com"], #Gotta get this array to a one to one value as well
"to-ids": true,
"ip": ["190.127.234.120"],
"distribution": "3",
"type": "md5",
"md5": "28e59d011c6103b5f5330b5ad042bdba"},
"date": "current date",
"distribution": 0,
"threat_level_id": "1"},
Как я разбить массивы, «ф» и «домен» возвращение и получить «Атрибут», чтобы держать все те же значения, как это -
{
"Event":{
"date":"2015-11-25",
"threat_level_id":"1",
"info":"TEST",
"analysis":"0",
"distribution":"0",
"orgc":"Malware, Inc",
"Attribute": [
{
"type":"md5",
"category":"Payload delivery",
"to_ids":true,
"distribution":"3",
"value":"35b759347aee663e36f5b91877749349"},
{"type":"url",
"category":"Network activity",
"to_ids":true,
"distribution":"3",
"value":"conf.f.360.cn"},
{
"type":"ip-dst",
"category":"Network activity",
"to_ids":true,
"distribution":"3",
"value":"1.1.1.1"}]
}
}
Я оценил бы это ... Я действительно не знаю, как начать с этого.
Большое спасибо! Это работает. Не уверен, что бы я сделал без переполнения стека. – Dpitt1968