Ich versuche, die Ergebnisse von mehr als einer Spinne in separaten Tabellen in MySQL zu speichern
Hier ist meine pipelines.py. Ich habe zwei Spinnen, eine bristol.py und eine bath.py. Wenn ich 'scrapy crawl bristol' starte, werden die Ergebnisse automatisch zu meiner MySQL-Datenbank mit dem Namen 'Bristol' hinzugefügt. Ich möchte 'srapy crawl bath' ausführen und die Ergebnisse in der MySQL-Datenbank unter dem Tabellennamen 'Bath' speichern können. Ich habe versucht, genau dieselbe Codezeile für die Tabelle "Bristol" hinzuzufügen, erhalte jedoch eine Fehlermeldung. Dies ist der Code, den ich versucht habe, direkt unter das erste self.cursor.execute zu schreiben
self.cursor.execute("""INSERT INTO Bath(BathCountry, BathQualification) VALUES ('{0}', '{1}')""".format(item['BathCountry'], "".join([s.encode('utf8') for s in item['BathQualification']])))
Wenn ich das versuche, erhalte ich eine Fehlermeldung. Gibt es eine Möglichkeit, dies zu tun? Das ist der Fehler
exceptions.KeyError: 'BathCountry'
Vielen Dank für Ihre Hilfe im Voraus.
import sys
import MySQLdb
import MySQLdb.cursors
import hashlib
from scrapy.exceptions import DropItem
from scrapy.http import Request
class TestPipeline(object):
def __init__(self):
self.conn = MySQLdb.connect(
user='user',
passwd='password',
db='db',
host='host',
charset='utf8',
use_unicode=True
)
self.cursor = self.conn.cursor()
def process_item(self, item, spider):
try:
self.cursor.execute("""INSERT INTO Bristol(BristolCountry, BristolQualification) VALUES ('{0}', '{1}')""".format(item['BristolCountry'], "".join([s.encode('utf8') for s in item['BristolQualification']])))
self.conn.commit()
return item
except MySQLdb.Error as e:
print "Error %d: %s" % (e.args[0], e.args[1])