Scrapy не пишет в столбцах postgresql
У меня есть серверная часть django с базой данных PostgreSQL. Я сделал скребок для заполнения базы данных, но проблема заключается в печати результатов в консоли, а не в базе данных, потому что я не вижу их в интерфейсе администратора Django. Возможно, я сделал что-то не так, я абсолютный новичок в области терапии.
Django_app / models.py
class Post(models.Model):
title = models.CharField(max_length=200, unique=True)
slug = models.SlugField(max_length=200, unique=True, blank=True)
created_on = models.DateTimeField(auto_now_add=True, null=True)
song_info = models.TextField(blank=True)
content = models.TextField()
category = models.ForeignKey(Category, on_delete=models.CASCADE)
# status = models.CharField(max_length=10, choices=STATUS_CHOICE, default='1')
status = models.IntegerField(
default=1, choices=list(STATUS.items()), verbose_name='Status')
Скарпер models.py
class Post(DeclarativeBase):
"""Sqlalchemy deals model"""
__tablename__ = "Post"
id = Column(Integer, primary_key=True)
title = Column('title', String)
song_info = Column('song_info', String)
content = Column('content', String)
Pipelines.py
from sqlalchemy.orm import sessionmaker
from .models import Post, db_connect, create_post_table
class ScrapersPipeline(object):
"""Livingsocial pipeline for storing scraped items in the database"""
def __init__(self):
"""Initializes database connection and sessionmaker.
Creates posttable.
"""
engine = db_connect()
create_post_table(engine)
self.Session = sessionmaker(bind=engine)
def process_item(self, item, spider):
"""Save deals in the database.
This method is called for every item pipeline component.
"""
session = self.Session()
post = Post(**item)
try:
session.add(post)
session.commit()
except:
session.rollback()
raise
finally:
session.close()
return item
The-Scraper.py
from scrapy import Spider
import scrapy
from scrapy.http import Request, FormRequest
from scrapers.items import Item
class LyricsmintSpider(Spider):
name = 'lyricsmint'
allowed_domains = ['lyricsmint.com']
start_urls = ['http://www.lyricsmint.com/']
def parse(self, response):
urls = response.xpath('//div[@class = "post-inner post-hover"]/h2/a/@href').extract()
for url in urls:
yield Request(url, callback=self.parse_lyrics)
# next_page_url = response.xpath('//li[@class="next right"]/a/@href').extract_first()
# if next_page_url:
# yield scrapy.Request(next_page_url, callback=self.parse)
def parse_lyrics(self, response):
item = Item()
item['song_info'] = response.xpath('//*[@class="songinfo"]/p').extract()
item['title'] = response.xpath('//*[@id="lyric"]/h2/text()').extract()
item['content'] = ''.join(response.xpath('//*[@id="lyric"]/p').extract())
yield item
Items.py
import scrapy
class Item(scrapy.Item):
title = scrapy.Field()
song_info = scrapy.Field()
content = scrapy.Field()
url = scrapy.Field()
ОБНОВЛЕНИЕ - нашел выход, создавая лучшие и простые конвейеры