【问题标题】:Scrapy Spider doesn't insert data to MySQLScrapy Spider 不向 MySQL 插入数据
【发布时间】:2020-01-09 15:53:45
【问题描述】:

我是 Python 新手,我编写的代码没有按预期工作。我尝试通过 Scrapy Spider 将一个项目插入 MySQL 数据库,但是当我检查数据库时没有那个项目。

我的管道代码如下。


from __future__ import print_function
import mysql.connector
from mysql.connector import errorcode


class LyricsPipeline(object):

    def __init__(self):
        self.create_connection()
        # self.create_table()

    def create_connection(self):
        self.conn = mysql.connector.connect(
            host='localhost',
            user='root',
            passwd='',
            database='lyrical'
        )
        self.curr = self.conn.cursor()

    # def create_table(self):
    #     self.curr.execute("""DROP TABLE IF EXISTS llyrics""")
    #     self.curr.execute("""create table llyrics (
    #         title text,
    #         movie text,
    #         lyrics text
    #     )""")
    def process_item(self, item, spider):
        self.store_db(item)
        return item

    def store_db(self, item):
        self: curr.execute("""insert into mylyrics values ('title','movie','lyrics')""", (
            item['title'][0],
            item['movie'][0],
            item['lyrics'][0]
        ))
        self.conn.commit()

我错过了什么,你能告诉我吗?

【问题讨论】:

  • 变量item是什么你这里没有定义。此外,它可能不会产生错误,因为您没有调用函数process_item...因此没有调用store_db() 函数。
  • 我建议修改您的代码以运行store_db() 函数并定义item,然后在必要时返回问题和错误
  • 日志中是否有任何错误?

标签: python mysql scrapy


【解决方案1】:

我假设该项目已正确传递给此函数,并且您从管道中获取它 - 您的管道也添加到以下设置中: setting.py

ITEM_PIPELINES = {
   'some_spider.pipelines.SpiderDataPipeline': 300,
}

其中 300 是它的重要性(更多关于 scrapy 文档的检查 - Scrapy pipeline doc)。

第二件事可以是你的函数store_db。试试看:

def store_db(self, item):
    self.curr.execute("insert into mylyrics values (%s,%s,%s)", (
        item['title'][0],
        item['movie'][0],
        item['lyrics'][0]
    ))
    self.conn.commit()

希望这能帮助您解决问题。

【讨论】:

  • 这不会解决问题...item 是未定义的。此外,您对字符串格式 %s 的使用也没有正确使用。
  • 项目在管道中通过scrapy传递。为什么 %s 错了?检查dev.mysql.com/doc/connector-python/en/…
  • 你误会了,看看store_db()的参数...item没有定义。
  • 我错过了什么吗? self.store_db(item)def process_item(self, item, spider) 调用,它从管道中获取项目 - 项目在其他代码段中定义。
猜你喜欢
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 2020-10-03
  • 2017-09-25
  • 1970-01-01
  • 2016-12-26
  • 2015-05-27
  • 1970-01-01
相关资源
最近更新 更多