0

スクレイピングされたアイテムを localhost で実行されている MySQL に永続化しようとしています。スパイダーが意図したとおりにサイトをクロールしてアイテムをスクレイピングしても、永続化のためのパイプライン オブジェクトは機能しません。アイテムをデータベースに保存しません。

pipelines.py ファイルの PersistMySQL クラス:

class PersistMySQL(object):

    con = None
    cur = None
    query = "INSERT INTO table(title, description, price) VALUES(%s, %s, %s)"

    def __init__(self):
        self.setupDBCon()

    def __del__(self):
        self.con.close()

    def setupDBCon(self):
        self.con = MySQLdb.connect(host='localhost',
                                   user='root',
                                   passwd='mypass',
                                   db='mydb')
        self.cur = self.con.cursor()

    def process_items(self, item):
        try:
            self.cur.execute(self.query, (item['Title'], item['Desc'], item['Price']))
            self.con.commit()
        except Error as err:
            print err

例外ブロックが出力されないため、クエリが有効であるように見えます。次のコードは、(他の設定と共に) settings.py にあります。

ITEM_PIPELINES = {
'myScraper.pipelines.CleanHTMLPipeline': 100,
'myScraper.pipelines.CleanStringPipeline': 200,
'myScraper.pipelines.PersistMySQL': 300
}

私はスクレイピー シェルを使用しており、非常に便利だと思いますが、シェルからアイテム パイプラインをデバッグする方法がないようで、MySQL エラーを出力する例外を使用しても役に立ちません。スパイダーはエラーなしで終了し、データベースに永続化する必要のある適切な数のアイテムがクロールされます。

4

0 に答える 0