将项目从scrapy归入数据库时​​出错

时间:2019-05-22 21:08:23

标签: python mysql scrapy

我试图将通过scrapy抓取的项目插入到MySQL数据库中(如果以前不存在,则创建一个新数据库),我遵循了一个在线教程,因为我不知道如何执行此操作,但是错误不断发生。

我试图将包含5个文本字段的项目存储到数据库中

这是我的管道

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html


import mysql.connector


class LinkPipeline(object):

    def _init_(self):
        self.create_connection()
        self.create_table()

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

    def create_table(self):
        self.curr.execute("""DROP TABLE IF EXISTS link_tb""")
        self.curr.execute("""create table link_tb(
                        profile text,
                        post_url text,
                        action text,
                        url text,
                        date text
                        )""")

    def process_item(self,item, spider):
        self.store_db(item)
        return(item)

    def store_db(self, item):
        self.curr.execute("""insert into link_tb values (%s,%s,%s,%s,%s)""", (
            item['profile'][0],
            item['post_url'][0],
            item['action'][0],
            item['url'][0],
            item['date'][0]
        ))
        self.conn.commit()

这是我的蜘蛛的一部分

        if response.meta['flag'] == 'init':
            #parse root comment
            for root in response.xpath('//div[contains(@id,"root")]/div/div/div[count(@id)!=1 and contains("0123456789", substring(@id,1,1))]'): 
                new = ItemLoader(item=LinkItem(),selector=root)
                new.context['lang'] = self.lang
                new.add_xpath('profile', "substring-before(.//h3/a/@href, concat(substring('&', 1 div contains(.//h3/a/@href, 'profile.php')), substring('?', 1 div not(contains(.//h3/a/@href, 'profile.php')))))")
                new.add_xpath('action','.//div[1]//text()')
                new.add_xpath('date','.//abbr/text()')
                new.add_value('post_url',response.meta['link_url'])
                new.add_value('url',response.url)
                yield new.load_item()

我希望该项目存储在我的“链接”数据库中,但我一直遇到此错误 “ self.cursor.execute(”“”插入link_tb值(%s,%s,%s,%s,%s)“”“,( AttributeError:“ LinkPipeline”对象没有属性“ cursor””

1 个答案:

答案 0 :(得分:1)

您将构造函数定义为_init_而不是__init__