2015-09-28 115 views
1

我有scrapy問題,而試圖將數據存儲到MySQL數據庫:我收到以下錯誤:(screenshot here)SCRAPY:如何將數據存儲到Mysql數據庫

我在pipelines.py代碼

class SQLStorePipeline(object): 

    def __init__(self): 
     self.dbpool = adbapi.ConnectionPool('localhost', db='python', 
       user='root', passwd='', cursorclass=MySQLdb.cursors.DictCursor, 
       charset='utf8', use_unicode=True) 

    def process_item(self, item, spider): 
     # run db query in thread pool 
     query = self.dbpool.runInteraction(self._conditional_insert, item) 
     query.addErrback(self.handle_error) 

     return item 

    def _conditional_insert(self, tx, item): 
     # create record if doesn't exist. 
     # all this block run on it's own thread 
     tx.execute("select * from test where name = %s", (item['name'][0],)) 
     result = tx.fetchone() 
     if result: 
      log.msg("Item already stored in db: %s" % item, level=log.DEBUG) 
     else: 
      tx.execute(\ 
       "insert into test (name, price) " 
       "values (%s, %s)", 
       (item['link'][0], 
       datetime.datetime.now()) 
      ) 
      log.msg("Item stored in db: %s" % item, level=log.DEBUG) 

    def handle_error(self, e): 
     log.err(e) 

(我把它從here)。

我的解析類是:

def parse(self, response): 
    item = DmozItem() 
    item['name'] = response.xpath('//meta[@itemprop="name"]/@content').extract()[0] 
    item['price'] = response.xpath('//meta[@itemprop="price"]/@content').extract()[0] 
    yield item 

我知道這個問題已經被問過,但我想在這裏問之前的所有不同的答案,其中沒有工作......

有人可以幫助我嗎?先謝謝你!

+0

根據你的截圖你有一個縮進問題。檢查你的空間。 – multivac

回答

0

仔細閱讀錯誤 - 它的下面一行說IndentationError

yield item 

這意味着你需要檢查你的縮進是一致的(每縮進4個空格):

def parse(self, response): 
    item = DmozItem() 
    item['name'] = response.xpath('//meta[@itemprop="name"]/@content').extract()[0] 
    item['price'] = response.xpath('//meta[@itemprop="price"]/@content').extract()[0] 
    yield item 

而且如果是這種情況,不要混合標籤和空格。

+0

非常感謝您的回答!我修好了,但不幸的是這不是主要問題,因爲當我刪除pipelines.py時,爬蟲正在工作。 這是不工作的管道,我真的不明白爲什麼... – galopin

+0

@galopin沒關係,你現在得到什麼錯誤?謝謝。 – alecxe

+0

謝謝@alecxe!我得到了這些錯誤:https://www.dropbox.com/s/ct4q5zzqzbsbfn6/Capture%20d%27%C3%A9cran%202015-09-28%2019.23.28.png?dl=0 – galopin

1

我找到了解決方案。其實@alecxe是對的,他的言論讓我找到了解決辦法。

MySQLdb只是沒有安裝,原因是它的安裝失敗,因爲我的名字有口音,並且Python因此無法處理路徑。

再一次非常感謝@alecxe!

相關問題