Не все ключи словаря присутствуют в CSV - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь написать в 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

1 Ответ

0 голосов
/ 23 апреля 2020

Необходимо выполнить одно из следующих действий:

  • Определить все выходные поля в настройке FEED_EXPORT_FIELDS

  • Используйте Item подкласс вместо dict

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...