Я получаю эту ошибку ... я не знаю, почему ...
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