我试图将通过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””
答案 0 :(得分:1)
您将构造函数定义为_init_
而不是__init__