关于Scrapy 的管道的问题
最近学Scrapy 在学习管道的时候,尝试使用数据库存储,但是报错了,不知道是什么原因,猜测是数据库连接出问题了,请各位大佬看看
先看代码
from itemadapter import ItemAdapter
import pymysql
class QiubaiproPipeline:
fp = None
# 只在刚开始爬的时候调用一次
def open_spider(self, spider):
print('开始爬虫...')
self.fp = open('./qiubai.text', 'w', encoding='utf-8')
# 专门用来处理item类型的对象
# 接收提交过来的item对象
# 每接收到一个item就调用一次方法
def process_item(self, item, spider):
author = item['author']
content = item['content']
self.fp.write(author + ':' + content + '\n')
return item # 将item传给下一管道
def close_spider(self, spider):
print('爬虫结束!!')
self.fp.close()
class mysqlPipeline(object):
conn = None
cursor = None
# 连接数据库
def opens_spider(self, spider):
self.conn = pymysql.Connect(host='127.0.0.1', port=3306, user='root', password='123456', db='test',charset='utf8')
def process_item(self, item, spider):
self.cursor = self.conn.cursor()
try:
self.cursor.execute('insert into qiubai values("%s","%s")' % (item["author"], item["content"]))
self.conn.commit()
except Exception as e:
print(e)
self.conn.rollback() # 回滚
return item
def close_spider(self, spider):
self.cursor.close()
self.conn.close()
这是遇到的问题
回答
找到出问题的原因了
我把open_spider写成了opens_spider,没想到函数的名称竟然是固定的。