Я пытаюсь написать в CSV в scrapy. У меня есть словарь с именем функции. Я добавляю ключи, а затем значения. Есть некоторые конкретные ключи, которые добавляются в al oop, например:
for i in paint_variable:
print("inside")
print(str(i[0]).replace(":",""))
features[str(i[0]).replace(":","")] = ""
features[str(i[0]).replace(":", "")]=(i[1])
pain_variables - это список. Это правильное добавление ключей.
title Sahibinden Peugeot 407 2.0 HDi Executive Premium 2006 Model
price 43.000 TL
İlan No: 14215895
İlan Tarihi: 15 Nisan 2020
Marka: Peugeot
Seri: 407
Model: 2.0 HDi Executive Premium
Yıl: 2006
Yakıt Tipi: Dizel
Vites Tipi: Otomatik
Motor Hacmi: 1997 cc
Motor Gücü: 138 hp
Kilometre: 295.000 km
Boya-değişen: Takasa Uygun
Takasa Uygun: Sahibinden
Kimden:
user_name [' Ayhan BOYSAN ']
explanation ['-', '- Tuna Caddesi, Hayır Sokak, Lena Reklam. Hemen cadde üzerinde, köşede araç görülebilir. Arkadaşımın ofisinin önünde durmakta.', '* Muayenesi yok, biteli iki ay kadar oldu, satışta anlaşılırsa yaptırıp vereceğim.', '* Sol arka ABS sensörü arıza veriyor, 150 lira parça fiyatı var, parçacılar açılır açılmaz sipariş verip yaptıracağım.', '* 295000 bakımı yapılmadı. Satışta anlaşılırsa yaptırıp vereceğim.', '* Aküsü 2 yıllık, sorunu yok ama araç kullanılmadığı için bir iki gün ya şarj edilmeli ya da bir iki saat dolaşılmalı.\xa0', '* Düz yolda iyi ama yokuşta çekişi düşük.\xa0', '* Cam tavan perdesinin ikisi eksik. Biz perdesiz kullanıyorduk çünkü 3 numara Ziebart noktasında film yaptırmıştım, çok rahat.', '* Isıtmalı koltukların rolesi değişmesi gerek, koltuk ısıtmaları çalışmıyor, geçen kış arızalandı, aracı kullanmadığımız için\xa0 \xa0 \xa0 \xa0yaptırmaya ihtiyaç duymadık.', '* Ezik yok, çizikler var bazı yerlerde, tampon köşelerinde de resimlerde gözüken yıpranmalar var.\xa0', 'Aracın ARTILARI', '* Orjinal, değişeni yok, kazası yok, macun yok.', '* Kaskolu hala. Boyattığım için sadece 2500 lira trameri var. Tamamen kozmetik amaçlı boyattım, gören usta anlar.', '* Ön cam 1 numara, yanlar 2 numara, cam tavan 3 numara Ziebarth filmi mevcut.', '* Derileri ve döşemeleri çok iyi.', '* Kesinlikle ezik bir araç değil.\xa0', '* Cd Changer mevcut', '* Yedek anahtarı mevcut', '* 17" Jant ve Lastikleri iyi durumda.', '* Xenon - Far Yıkama - Cam Tavan vb.', '* Her yıl bakımını orjinal parça kullanarak yaptım.', 'Evde iki kişiyiz ve bunu babamın kullanımı için almıştım ama yaştan ötürü artık kullanamaz hale geldi, evdeki 3. araç. İlk kez satışa koyuyorum ve masrafları olduğu için bu rakamı yazıyorum. Piyasasının ne olduğunu hepimiz biliyoruz. Ucuz diye kazalı sanmayın.', 'Bedavacı kişiler ararsa eğer karşılıklı şekilde üzülürüz uyarıyorum :)', 'Göz boyamak, kandırmak niyetindeki insanlardan olmadığım için ne biliyorsam yazdım. Yıkamadan resimleri ekledim. Buna göre yakışıksız teklifler mesajlar atmayın.', 'Değerinde toprak ile takasa girerim dağın başında olmaması kaydı ile.', 'Aracı görmek isteyenler Bayrampaşa eski cezaevi tarafına USTASI ile gelebilir. Oraya buraya gitmez aracım. Olumlu olumsuz yazdıklarım geçerlidir.', 'MESAJLA SON RAKAM YAZANLARA CEVAP VERMEM. Pazarlık gönül kırmamak adına hak ettiği kadar yapılır.', 'Saat 20.00 den sonra telefonlara bakamayabilirim, mesaj atarsanız dönerim.', 'Teşekkürler']
Sağ Arka Çamurluk Boyanmış
Arka Kaput Boyanmış
Sol Arka Çamurluk Boyanmış
Sağ Arka Kapı Boyanmış
Sağ Ön Kapı Boyanmış
Tavan Orijinal
Sol Arka Kapı Boyanmış
Sol Ön Kapı Boyanmış
Sağ Ön Çamurluk Boyanmış
Motor Kaputu Boyanmış
Sol Ön Çamurluk Boyanmış
Ön Tampon Boyanmış
Arka Tampon Boyanmış
year 2006
feul_type Dizel
gear_type Otomatik
case_type Station wagon
kilometer 295.000 km
vehicle_type Bireysel Araç
color Bej
nationality (TR) Türkiye
warranty Garantisi Yok
first_owner İlk Sahibi Değilim
suitable_for_clearing Takasa Uygun
from_who Sahibinden
annual_mtv 1.124 TL
traction Motor ve Performans
number_of_cylinders Önden Çekiş
maxiumum_power 138 hp
minimum_power 11,2 sn
acceleration 201 km/s
maximumspeed Ortalama Yakıt Tüketimi
Ключи в l oop начинаются после ключа объяснения. Они присутствуют здесь. Но они не записаны в CSV. введите описание изображения здесь
Как видите, этих ключей нет. Вот полностью функциональный код, если кто-то хочет воссоздать:
class Myspider(SitemapSpider):
name = 'spidername'
sitemap_urls = ['https://www.arabam.com/sitemap/otomobil_1.xml']
sitemap_rules = [
('/otomobil/', 'parse'),
# ('/category/', 'parse_category'),
]
custom_settings = {'FEED_FORMAT':'csv','FEED_URI': str(datetime.today().strftime('%d%m%y'))+'.csv'}
def parse(self,response):
for td in response.xpath("/html/body/div[3]/div[6]/div[4]/div/div[2]/table/tbody/tr/td[4]/div/a/@href").extract():
checks = str(td.split("/")[3]).split("-")
for items in checks:
if items.isdigit():
if int(items) > 2001:
url = "https://www.arabam.com/"+ td
yield scrapy.Request(url, callback=self.parse_dir_contents)
def parse_dir_contents(self,response):
# print("hi here")
features = {}
features["ad_url"] = response.request.url
features["ad_path"] =""
for paths in response.xpath(" /html/body/div[3]/div[6]/div[1]/div/div/div/div[1]/div/span/a/text()").extract():
features["ad_path"]+=paths
features["ad_path"]+="/"
features["title"] = response.xpath("/html/body/div[3]/div[6]/div[3]/div/div[1]/h1/text()").extract()[0]
features["price"] = response.xpath("/html/body/div[3]/div[6]/div[3]/div/div[1]/div[1]/div[2]/div[1]/div/span/text()").extract()[0]
for items in response.xpath("/html/body/div[3]/div[6]/div[3]/div/div[1]/div[1]/div[2]/ul/li/span[1]/text()").extract():
features[(str(items) )] = ""
counter = 1
for items in response.xpath("/html/body/div[3]/div[6]/div[3]/div/div[1]/div[1]/div[2]/ul/li/span[2]/text()").extract():
query = (response.xpath("/html/body/div[3]/div[6]/div[3]/div/div[1]/div[1]/div[2]/ul/li["+str(counter)+"]/span[1]/text()").extract())
features[str(query[0])] = items
counter+=1
features["user_name"] = response.xpath("/html/body/div[3]/div[6]/div[3]/div/div[3]/div/div/div[1]/p/text()").extract()
if not features["user_name"]:
features["user_name"] = response.xpath("/html/body/div[3]/div[6]/div[3]/div/div[3]/div/div/div[1]/a/span/text()").extract()
features["explanation"] = response.xpath("/html/body/div[3]/div[6]/div[3]/div/div[1]/div[3]/div/div[1]/div/div/p/text()").extract()
#change this
paint_variable = []
for li in response.xpath("/html/body/div[3]/div[6]/div[3]/div/div[1]/div[3]/div/div[2]/div/div[2]/ul[1]/li"):
paint_variable.append(li.xpath('span/text()').extract())
for i in paint_variable:
print("inside")
print(str(i[0]).replace(":",""))
features[str(i[0]).replace(":","")] = ""
features[str(i[0]).replace(":", "")]=(i[1])
options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1200x600')
d = webdriver.Chrome(chrome_options=options,
executable_path='/Users/fatima.arshad/Downloads/chromedriver')
d.get(features["ad_url"])
# Use send_keys(Keys.HOME) to scroll up to the top of page
d.find_element_by_tag_name('body').send_keys(
Keys.END)
while True:
d.find_element_by_tag_name('body').send_keys(
Keys.UP)
e = d.find_element_by_xpath("/html/body/div[3]/div[6]/div[3]/div/div[1]/div[3]/div/div[3]/div")
if e.text:
break
overview1 = e.text.split("\n")
features["year"] = overview1[2]
features["feul_type"] = overview1[4]
features["gear_type"] = overview1[6]
features["case_type"] = overview1[8]
features["kilometer"] = overview1[10]
features["vehicle_type"] = overview1[12]
features["color"] = overview1[14]
features["nationality"] = overview1[16]
features["warranty"] = overview1[18]
features["first_owner"] = overview1[20]
features["suitable_for_clearing"] = overview1[22]
features["from_who"] = overview1[24]
features["annual_mtv"] = overview1[26]
features["traction"] = overview1[29]
features["number_of_cylinders"] = overview1[31]
features["maxiumum_power"] = overview1[39]
features["minimum_power"] = overview1[41]
features["acceleration"] = overview1[43]
features["maximumspeed"] = overview1[45]
print("feature starting")
for key, value in features.items():
print(key, value)
# print("s"+ str(overview1))
yield features
process = CrawlerProcess({
})
process.crawl(Myspider)
process.start() # the script wi
[1]: https://i.stack.imgur.com/qfS2e.png