2014-04-29 2 views
0

Je suis nouvelles à heroku pg. Ce que je fais ici, c'est que j'ai écrit un crawler scrapy qui fonctionne sans aucune erreur. Le problème est que je veux mettre toutes les données éraflées dans ma base de données heroku postgres. Pour ce faire j'ai quelque peu suivi this tutorialChargement de la base de données heroku pg avec des données grattées de spider spider.

Lorsque je lance le robot sur ma machine locale en utilisant scrapy crawl spidername il fonctionne avec succès mais les données grattées ne sont pas insérées et aucune table n'est créée sur la base de données heroku. Je ne reçois même pas d'erreurs sur le terminal local. c'est ce que mon code est ...

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 

araignée

Code

pour araignée scrapy vous le trouverez here

Répondre

0

vous devez ajouter le ITEM_PIPELINES = { 'crawlerconnectdatabase.pipelines.CrawlerconnectdatabasePipeline': 300 ,} à votre settings.py

+0

ok je vais essayer cela .... –