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
Codepour araignée scrapy vous le trouverez here
ok je vais essayer cela .... –