【问题标题】:Loading heroku pg database with scraped data from scrapy spider.\使用从 scrapy spider 抓取的数据加载 heroku pg 数据库。\
【发布时间】:2014-04-29 09:31:45
【问题描述】:

我是 heroku pg 的新闻。我在这里所做的是我编写了一个运行没有任何错误的scrapy爬虫。问题是我想将所有抓取的数据放入我的 heroku postgres 数据库中。为此,我有点追随this tutorial

当我使用scrapy crawl spidername 在本地机器上运行爬虫时,它运行成功,但没有插入抓取的数据,也没有在 heroku 数据库上创建任何表。我什至没有在本地终端上收到任何错误。这就是我的代码...

settings.py

BOT_NAME = 'crawlerconnectdatabase'

SPIDER_MODULES = ['crawlerconnectdatabase.spiders']
NEWSPIDER_MODULE = 'crawlerconnectdatabase.spiders'

DATABASE = {'drivername': 'postgres',
        'host': 'ec2-54-235-250-41.compute-1.amazonaws.com',
        'port': '5432',
        'username': 'dtxwjcycsaweyu',
        'password': '***',
        'database': 'ddcir2p1u2vk07'}

items.py

from scrapy.item import Item, Field

class CrawlerconnectdatabaseItem(Item):
    name = Field()
    url = Field()
    title = Field()
    link = Field()
    page_title = Field()
    desc_link = Field()
    body = Field()
    news_headline = Field()
    pass

models.py

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.engine.url import URL
import settings

DeclarativeBase = declarative_base()


def db_connect():

    return create_engine(URL(**settings.DATABASE))


def create_deals_table(engine):

    DeclarativeBase.metadata.create_all(engine)


class Deals(DeclarativeBase):
"""Sqlalchemy deals model"""
    __tablename__ = "news_data"

    id = Column(Integer, primary_key=True)
    body = Column('body', String)

pipelines.py

from sqlalchemy.orm import sessionmaker
from models import Deals, db_connect, create_deals_table

class CrawlerconnectdatabasePipeline(object):

    def __init__(self):
        engine = db_connect()
        create_deals_table(engine)
        self.Session = sessionmaker(bind=engine)

    def process_item(self, item, spider):
        session = self.Session()
        deal = Deals(**item)

        try:
            session.add(deal)
            session.commit()
        except:
            session.rollback()
            raise
        finally:
            session.close()

        return item

蜘蛛

scrapy spider 的代码here

【问题讨论】:

    标签: python postgresql heroku scrapy heroku-postgres


    【解决方案1】:

    您需要将 ITEM_PIPELINES = {'crawlerconnectdatabase.pipelines.CrawlerconnectdatabasePipeline': 300,} 添加到您的 settings.py 中

    【讨论】:

      猜你喜欢
      • 2020-10-03
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2014-10-21
      • 2016-05-09
      • 2015-02-05
      • 2013-05-27
      相关资源
      最近更新 更多