2012-05-04 13 views
0

私はscrapyのためのMySQLのパイプラインを記述しようとしているが、私は、「インポートエラー」を取得:ませモジュール - scrapyパイプライン

File "C:\Python27\lib\site-packages\scrapy-0.14.3-py2.7-win32.egg\scrapy\utils\misc.py", line 39,  
in load_object raise ImportError, "Error loading object '%s': %s" % (path, e) 
ImportError: Error loading object 'tutorial.pipelines.MySQLStore': No module named exceptions 

パイプラインのためのコードはありません:

from scrapy import log 
from scrapy.core.exceptions import DropItem 
from twisted.enterprise import adbapi 

import time 
import MySQLdb.cursors 

class FilterWords(object): 
    """A pipeline for filtering out items which contain certain words in their 
    description""" 

    # put all words in lowercase 
    words_to_filter = ['politics', 'religion'] 

     def process_item(self, spider, item): 
     print spider 
     for word in self.words_to_filter: 
      if word in unicode(item['description']).lower(): 
       raise DropItem("Contains forbidden word: %s" % word) 
     else: 
      return item 

class MySQLStore(object): 

    def __init__(self): 
     # @@@ hardcoded db settings 
     # TODO: make settings configurable through settings 
     self.dbpool = adbapi.ConnectionPool('', 
      db='', 
      user='', 
      passwd='', 
      cursorclass=MySQLdb.cursors.DictCursor, 
      charset='utf8', 
      use_unicode=True 
     ) 

    def process_item(self, spider, item): 
     # 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 scrapytest where link = %s", (item['link'][0],)) 
     result = tx.fetchone() 
     if result: 
      log.msg("Item already stored in db: %s" % item, level=log.DEBUG) 
     else: 
      tx.execute(\ 
       "insert into scrapytest (title, link, desc) " 
       "values (%s, %s, %s)", 
       (item['title'][0], 
       item['link'][0], 
       item['desc'][0]) 
      ) 
      log.msg("Item stored in db: %s" % item, level=log.DEBUG) 

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

私は他のパイプライン(Jsonのような)を使用しようとしましたが、それらは機能しますが、私は理解できない輸入の問題があります。

+0

パイプラインコードを正しく貼り付けたとは思いません。字下げを見て、クラスMySQLStoreは空です。 – JosefAssad

+0

はい、コードを貼り付けたときに私はちょっと不注意でしたが、今修正しましたが、インデントが正しい元のスクリプトではこれが問題ではないと私は考えています。その他の提案はありますか? @JosefAssad – user1009453

答えて

2

エラーメッセージはです。非常にクリアです!

ImportError: ... No module named exceptions 

exceptionsをインポートしようとしていますが、そのようなモジュールはありません。モジュールというインポートのコードを見てください:

from scrapy.core.exceptions import DropItem 

これは次のようになります。

from scrapy.exceptions import DropItem 

scrapy.core.exceptionsモジュールはありません。

+0

素晴らしい、このことで私を助けてくれてありがとう。私はあなたが示唆したように、問題は消えてしまったようです。しかし、今私は得る: "ImportError:ファイル名によるインポートはサポートされていません。 これは関連する問題ですか、まったく異なる問題ですか?もう一度、助けてくれてありがとう! – user1009453

関連する問題