2016-08-07 41 views
0

So ist mein Problem, dass die Informationen geschabt werden, wird nicht in der Datenbank angezeigt.scrapy mysql gibt leere Ergebnisse zurück

Meine Spinne funktioniert gut und druckt die Informationen aus, zum Beispiel in einer .json-Datei.

die pipelines.py

import sys 
import MySQLdb 
import hashlib 
from scrapy.exceptions import DropItem 
from scrapy.http import Request 

class MySQLStorePipeline(object): 
    def __init__(self): 
    self.conn = MySQLdb.connect(host="10.0.2.2", user='root', passwd='', db='mpmf', charset="utf8", use_unicode=True) 
    self.cursor = self.conn.cursor() 

def process_item(self, item, stack):  
    try: 
     self.cursor.execute("""INSERT INTO test (pen, name) 
        VALUES (%s, %s)""", 
        (item['pen'].encode('utf-8'), item['name'].encode('utf-8'))) 

    self.conn.commit() 


except MySQLdb.Error, e: 
    print "Error %d: %s" % (e.args[0], e.args[1]) 


return item 

und in settings.py i

ITEM_PIPELINES = { 
'stack.pipelines.MySQLStorePipeline': 300, 
} 

und meine log zeigen diese Fehler hinzugefügt haben, aber man kann sehen nach wie vor, dass die Informationsbeschaffung, obwohl es zeigt Werke Dies.

File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 577, in _runCallbacks 
current.result = callback(current.result, *args, **kw) 
File "/root/stack/stack/pipelines.py", line 14, in process_item 
self.cursor.execute("""INSERT INTO test (pen, name) VALUES (%s, %s)""", (item['pen'].encode('utf-8'), item['name'].encode('utf-8'))) 
AttributeError: 'list' object has no attribute 'encode' 

so werden keine Ergebnisse in die Datenbank importiert

Antwort

0

es gelöst Problem der Vertiefung und Listenobjekt war

kein Attribut hatte
import sys 
import MySQLdb 
import hashlib 
from scrapy.exceptions import DropItem 
from scrapy.http import Request 

class MySQLStorePipeline(object): 
def __init__(self): 
self.conn = MySQLdb.connect(host="10.0.2.2", user='root', passwd='', db='mpmf', charset="utf8", use_unicode=True) 
self.cursor = self.conn.cursor() 

def process_item(self, item, stack):  
try: 
    self.cursor.execute("""INSERT INTO test (pen, name) VALUES (%s, %s)""", (item['pen'][0].encode('utf-8'), item['name'][0].encode('utf-8'))) 

    self.conn.commit() 


except MySQLdb.Error, e: 
    print "Error %d: %s" % (e.args[0], e.args[1]) 


return item