Я пытаюсь почистить некоторые сайты.Я хотел бы сохранить все данные, очищенные в окончательном кадре данных с именем Tabel_Final.Я сохранил каждый атрибут в отдельном списке, а затем я пытаюсь объединить списки в конечном кадре данных, а затем вывести его в виде csv для проверки результатов.У меня есть другой метод в коде, где я добавляю все данные, собранные непосредственно в CSV, но мне очень нужен этот фрейм данных :( Любая помощь, пожалуйста?
Это мой код:
import scrapy
import json
import csv
import re
import pandas as pd
name_list = []
category_list = []
type_list = []
model_list = []
model_name_list = []
model_code_list = []
Tabel_Final = pd.DataFrame(columns=['Country','Category', 'Type', 'Model', 'Name', 'SKU'])
class QuotesSpider(scrapy.Spider):
name = "quotes1"
def start_requests(self):
with open('input.csv','r') as csvf:
urlreader = csv.reader(csvf, delimiter=',',quotechar='"')
for url in urlreader:
if url[0]=="y":
yield scrapy.Request(url[1])
def parse(self, response):
regex = re.compile(r'"product"\s*:\s*(.+?\})', re.DOTALL)
regex1 = re.compile(r'"pathIndicator"\s*:\s*(.+?\})', re.DOTALL)
source_json1 = response.xpath("//script[contains(., 'var digitalData')]/text()").re_first(regex)
source_json2 = response.xpath("//script[contains(., 'var digitalData')]/text()").re_first(regex1)
model_code = response.xpath('//script').re_first('modelCode.*?"(.*)"')
name = response.xpath("//meta[@property='og:country-name']/@content").extract_first()
source_arr = response.xpath("//script[contains(., 'COUNTRY_SHOP_STATUS')]/text()").extract()
color = response.xpath("//div[@class='product-details__toggler-info-title']//span[@class='product-details__toggler-selected']/@title").extract()
if source_json1 and source_json2:
source_json1 = re.sub(r'//[^\n]+', "", source_json1)
source_json2 = re.sub(r'//[^\n]+', "", source_json2)
product = json.loads(source_json1)
path = json.loads(source_json2)
product_category = product["pvi_type_name"]
product_type = product["pvi_subtype_name"]
product_model = path["depth_5"]
product_name = product["model_name"]
if source_json1 and source_json2:
source1 = source_json1[0]
source2 = source_json2[0]
name_list.append(name)
category_list.append(product_category)
type_list.append(product_type)
model_list.append(product_model)
model_name_list.append(product_name)
model_code_list.append(model_code)
with open('output.csv','a',newline='') as csvfile:
fieldnames = ['Country','Category','Type','Model','Name','SK','Color']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
if product_category:
writer.writerow({'Country': name, 'Category': product_category, 'Type': product_type, 'Model': product_model, 'Name': product_name, 'SK': model_code, 'Color': color})
if source_arr:
categorie = re.findall('product.pvi_type_name.*"(.*)"', source_arr[0])
tip = re.findall('product.pvi_subtype_name.*"(.*)"', source_arr[0])
model = re.findall('product.displayName.*"(.*)"', source_arr[0])
model_nume = re.findall('product.model_name.*"(.*)"', source_arr[0])
name_list.append(name)
category_list.append(categorie)
type_list.append(tip)
model_list.append(model)
model_name_list.append(model_nume)
model_code_list.append(model_code)
with open('output.csv', 'a',newline='') as csvfile:
fieldnames = ['Country','Category','Type','Model','Name','SK','Color']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writerow({'Country': name, 'Category': categorie, 'Type': tip, 'Model': model, 'Name': model_nume, 'SK': model_code, 'Color': color})
Tabel_Final.append(list(zip(name_list, category_list, type_list, model_list, model_name_list, model_code_list)))
return Tabel_Final