Python Scrapy Вставить элементы в MySQL, но получить ошибку Операнд должен содержать 1 столбец (ы) - PullRequest
0 голосов
/ 01 ноября 2019

Я получаю эту ошибку ... я не знаю, почему ...

MySQLdb._exceptions.OperationalError: (1241, 'Operand should contain 1 column(s)')

Это мой конвейер

class DetailsPipeline(object):
    # The table you items.FundItem class map to, my table is named fund    
    insert_sql = """insert into items (%s) values ( %s )"""    

    def __init__(self):    
        dbargs = settings.get('DB_CONNECT')    
        db_server = settings.get('DB_SERVER')    
        dbpool = adbapi.ConnectionPool(db_server, **dbargs)    
        self.dbpool = dbpool    

    def __del__(self):    
        self.dbpool.close()    

    def process_item(self, item, spider):    
        self.insert_data(item, self.insert_sql)    
        return item    

    def insert_data(self, item, insert):    
        keys = item.fields.keys()    
        fields = u','.join(keys)    
        qm = u','.join([u'%s'] * len(keys))    
        sql = insert % (fields, qm)    
        data = [item[k] for k in keys]
        return self.dbpool.runOperation(sql, data)

Моя таблица MySQL имеетте же поля, что и поля предметов.

Вот мои items.py

class DetailsItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    name = scrapy.Field()
    price = scrapy.Field()
    imagelink = scrapy.Field()
    pass

А это мой паук

class Spider(scrapy.Spider):
    name = 'xxxxxx'
    allowed_domains = ['xxxxxxx.de']
    # Crawl Mobiles for top 5 pages
    start_urls = ['https://www.xxxxxxx.de/s?k=handys']
    # initialize
    page_number = 2

    def parse(self, response):
        items = DetailsItem()

        # Extracting details
        name = response.css('.a-color-base.a-text-normal').css('::text').extract()
        price = response.css('.a-price:nth-child(1) .a-price-whole').css('::text').extract()
        imagelink = response.css('.s-image::attr(src)').extract()

        # Passing it to items dictionary
        items['name'] = name
        items['price'] = price
        items['imagelink'] = imagelink

        yield items

        # Parse subsequent pages
        next_page = 'https://www.xxxx.de/s?k=handys&page=' + str(Spider.page_number) + ''


        if Spider.page_number<=5:
            Spider.page_number += 1
            yield response.follow(next_page, callback = self.parse)

Если я запускаю скрап, я получаюсайты и предметы и прочее. Выглядит так:

'name': ['Cubot J3 Dual SIM Android Go Ultra dünn Smartphone ohne Vertrag,5 '
          'Zoll (18:9) Touch-Display, 16GB + 1GB, Quad-Core Prozessor, Handy, '
          'Face ID, nutzbares GPS, Blau',
          'DOOGEE Y8 Android 9.0 4G LTE Smartphone ohne Vertrag, 6,1 Zoll '
          'Wassertropfen Bildschirm (90% Bildschirmverhältnis), 1,5GHz '
          '3GB+16GB, Gesichtserkennung + Fingerabdruck - Smaragd Grün',
          'UMIDIGI Power Android 9.0 Smartphone ohne Vertrag, Handy 6.3 Zoll '
          'FHD+ Waterdrop Full Screen Display, 64GB interner Speicher, 5150mAh '
          'Akku, NFC, 16MP+5MP Dual Kamera, Schwarz',
          'Smartphone ohne vertrag, DOOGEE X50 3G Dual SIM Android Go Handy '
          'Ohne Vertrag Günstig, 5 Zoll 18:9 HD Display, MT6580M Quad Core - '
          '1.3 GHz, Dual 5.0MP Kameras,1GM+8GB - Voller Glaskörper, GPS - Blau',
          'Cubot Quest (2019) Ultra Dünn Android 9.0 4G Dual SIM IP68 '
          'Wasserdicht Sport Outdoor Smartphone ohne Vertrag, 5.5” HD+ Display '
          'mit 4000 mAh Akku, 4GB Ram+64GB Rom, 12MP+2MP / 8MP, NFC Funktion '
          'Schwarz',
          'Samsung S7 Schwarz 32GB SIM-Free Smartphone (Generalüberholt)',
          'E-yiiviil Amoled Display Kompatibel mit Samsung Galaxy A50 (2019) '
          'A505F/DS A505F A505FD A505A 6.4" LCD Touchscreen Bildschirm '
          'Digitizer Assembly with Rahmen +Tools',
          'Vernee M3(2019) Dual Sim Smartphone Ohne Vertrag, 3GB RAM 32GB ROM, '
          '13MP+5MP Haupt/5MP Frontkameras, Android 8.1 Oreo, 5,5 Zoll 18: 9 '
          'HD-Display, 4G Handy mit 3300 mAh Batterie, Fingerabdruck(schwarz)',
          'Samsung Galaxy Xcover 4s Enterprise Edition 32GB Handy, schwarz, '
          'Black, Android',
          'Apple iPhone 6, 4,7in Display, SIM-Free, 64 GB, 2014, Space Grau '
          '(Generalüberholt)',
          '(2019) 4G Smartphone ohne vertrag, OUKITEL C16 Pro Android 9.0 '
          'Handy - MT6761 Quad-Core 2.0GHz 3GB +32GB, 5,71”Wassertropfen '
          'Bildschirm, Gesichtserkennung& Fingerabdrucksensor Entsperren Grün',
          'Uposao Kompatibel mit Samsung Galaxy A40 Hülle Silikon Schutzhülle '
          'Bunt Retro Muster Durchsichtig Case Klar Transparent TPU Tasche '
          'Handyhülle Anti-Kratzer Stoßfest,Pink Rose Blumen',
          'HOMTOM HT16 Smartphone 3G (5,0 Zoll HD Touch-Display Handy, 8MP '
          'Kameras, 1GB RAM, 8GB interner Speicher, DUA-Sim 3000mah Android '
          '6.0) Geeignet für Kinder und Familien Mittleren Alters',
          'Apple iPhone 6, 4,7" Display, SIM-Free, 64 GB, 2014, Gold '
          '(Generalüberholt)',
          'LG K40 Smartphone (14, 48 cm (5, 7 Zoll) LC-Display, 32 GB interner '
          'Speicher, 2GB RAM, MIL-STD-810G, Android 8.0) Moroccan Blue',
          'Samsung Galaxy A7 (2018) Smartphone [6 Zoll, 64GB, 24 Megapixel]',
          'Cubot NOVA 4G-LTE Dual SIM Smartphone ohne Vertrag 5.5 Zoll (18:9) '
          'IPS HD Touch Display Android 8,1 3GB RAM+16GB ROM 13MP+8MP Kamera '
          '0.1s Fingerprint Sensor Handy Schwarz',
          'AUKEY Handyhalterung Auto Lüftung KFZ Magnet Universal für iPhone 7 '
          '/ 6s / 6 / 5s / 5, Samsung Note 8 / Galaxy S6 und jedes andere '
          'Smartphone oder GPS-Gerät',
          'kwmobile Smartphone Fingerhalter 3er Set - Handy Halter Griff '
          'Halterung Einhandbedienung - 3X Handyhalter in Schwarz',
          'VERNEE M5 Smartphone ohne Vertrag Günstig 4G LTE, 5,2 Zoll Android '
          'Handy dual SIM, Metallstruktur & ultraflach (6,9 mm) - Octa-Core 4 '
          'GB + 64 GB, 8MP + 13MP-Kameras, 3300 mAh Akku GPS+GLONASS Blau',
          'Samsung Galaxy Xcover 4 Smartphone (12,67 cm (5 Zoll) '
          'Touch-Display, 16 GB Speicher, Android 7,0 Nougat) schwarz',
          'CUBOT X19 4G LTE Smartphone ohne Vertrag Handy 5.93″ FHD Display '
          'Android 9.0 64GB Speicher 4GB RAM 4000mAh Akku Dual-Kamera Dual-SIM '
          '(Schwarz)'],
 'price': ['59,99',
           '79,99',
           '129,99',
           '48,99',
           '169,99',
           '153,71',
           '168,98',
           '79,99',
           '219,99',
           '161,90',
           '79,99',
           '7,99',
           '39,99',
           '161,00',
           '119,99',
           '79,99',
           '6,99',
           '7,99',
           '99,99',
           '199,00',
           '109,65']}

Так что выглядит отлично, но я не знаю, почему я получаю эту ошибку при вставке в mysqldb

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