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()

ОБНОВЛЕНИЕ - нашел выход, создавая лучшие и простые конвейеры

0 ответов

Другие вопросы по тегам