Я использую Scrapy для очистки данных из 9000+ URL-адресов, содержащихся в JSON с соответствующим идентификатором.
Вот мой тип объекта JSON:
[{
"objectID": 10500,
"gm_url": "https://reddit.com/1"
},
"objectID": 10501,
"gm_url": "https://reddit.com/2"
}]
Я бы хотел, чтобы мои результаты были в формате json со соскребенными данными, соответствующим URL и идентификатором.
[{
"objectID": 10500,
"gm_url": "https://reddit.com",
"results": [
{
"model": "",
"price": "",
"auction": "",
"date": "",
"auction_url": "",
"img": ""
},
{
"model": "",
"price": "",
"auction": "",
"date": "",
"auction_url": "",
"img": ""
},
{
"model": "",
"price": "",
"auction": "",
"date": "",
"auction_url": "",
"img": ""
}
]
}]
Вот мой код прямо сейчас в скрапе (что-то вроде грязного):
import json
import scrapy
with open('/home/bolgi/Workspace/Dev/python_workspace/gm_spider/Json/db_urls_glenmarch_results_scrapy_reduced.json', encoding='utf-8') as data_file:
data = json.load(data_file)
for item in data:
objectId = item['objectID']
gmUrl = item['gm_url']
class GlenMarchSpider(scrapy.Spider):
name = 'glenmarch'
def start_requests(self):
start_urls = gmUrl
for url in start_urls:
yield scrapy.Request(url, callback=self.parse)
def parse(self, response):
for caritem in response.css("div.car-item-border"):
yield {
"url": response.url,
"model": caritem.css("div.make::text").get(),
"price": caritem.css("div.price::text").get(),
"auction": caritem.css("div.auctionHouse::text").get(),
"date": caritem.css("div.date::text").get(),
"auction_url": caritem.css("div.view-auction a::attr(href)").get(),
"img": caritem.css("img.img-responsive::attr(src)").get()
}
Я не знаю, как структурировать код и как использовать файл JSON, я новичок в python, и это немного сложно для меня.