Сайт для S9 имеет структуру, отличную от S8, поэтому всегда будет ошибка, потому что на S9 вы не найдете COUNTRY_SHOP_STATUS.
Использование csv-writer напрямую не похоже на копирование. Вы перезаписываете свой результат много раз. Потому что вы открываете новый CSV-файл для каждого продукта. Если вы действительно хотите сделать это таким образом. Откройте файл csv в start_requests и добавьте в синтаксический анализ. Но взгляните на предметные конвейеры.
Я удаляю цикл с молнией, потому что синтаксический анализ уже на самом низком уровне.
import scrapy
import csv
import re
class QuotesSpider(scrapy.Spider):
name = "quotes"
def start_requests(self):
with open('so_52069753.csv','r') as csvf:
urlreader = csv.reader(csvf, delimiter=',',quotechar='"')
for url in urlreader:
if url[0]=="y":
yield scrapy.Request(url[1])
with open('so_52069753_out.csv', 'w') as csvfile:
fieldnames = ['Category', 'Type', 'SK']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
def parse(self, response):
def get_values(parameter, script):
return re.findall('%s = "(.*)"' % parameter, script)[0]
source_arr = response.xpath("//script[contains(., 'COUNTRY_SHOP_STATUS')]/text()").extract()
if source_arr:
source = source_arr[0]
#yield ({'Category': get_values("pvi_subtype_name", source), 'Type': get_values("pathIndicator.depth_5", source), 'SK': get_values("model_name", source)})
with open('so_52069753_out.csv', 'a') as csvfile:
fieldnames = ['Category', 'Type', 'SK']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writerow({'Category': get_values("pvi_subtype_name", source), 'Type': get_values("pathIndicator.depth_5", source), 'SK': get_values("model_name", source)})
Я также изменил входной файл csv_file (so_52069753.csv):
y,https://www.samsung.com/uk/smartphones/galaxy-note8/
y,https://www.samsung.com/uk/smartphones/galaxy-s8/
y,https://www.samsung.com/uk/smartphones/galaxy-s9/
Так что можно настроить, обрабатывается ли URL или нет.