質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Amazon DynamoDB

Amazon DynamoDBは、 AWS上のNoSQLデータベースサービスです。フルマネージド型のサービスで、スキーマレス、高速且つ安定性のある動作、自動的に容量を変更する自動スケーリングなどの特徴を持ちます。

NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

受付中

Scrapyで取得したデータをdynamoDBの複数のテーブルに登録したい

shakesuke
shakesuke

総合スコア0

Amazon DynamoDB

Amazon DynamoDBは、 AWS上のNoSQLデータベースサービスです。フルマネージド型のサービスで、スキーマレス、高速且つ安定性のある動作、自動的に容量を変更する自動スケーリングなどの特徴を持ちます。

NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

0回答

0評価

0クリップ

922閲覧

投稿2019/11/27 23:37

現在複数のECサイトをscrapyでスクレイピングし、取得したデータをdynamoDBに登録するプログラムを開発しています。

この時、取得した商品情報をproduct_tableに、店舗情報をstore_tableに格納しようと思っています。

そこでスクレイピングしたデータごとにテーブルを切り替えたいのですが、自力で調べてもその方法が分からない状態です。

Scrapyで取得したデータをdynamoDBの複数のテーブルに登録する方法を、ご教授いただけないでしょうか?

下記にscrapyのsettings.pyとpipelines.pyのコードを載せます。

pipelines.pyのコードは以下のものをお借りさせていただきました。
https://github.com/acordiner/scrapy-dynamodb

python

ITEM_PIPELINES = { 'myproject.pipelines.DynamoDBPipeline': 300, } AWS_ACCESS_KEY_ID = 'AWS_ACEESS_KEY_ID' AWS_SECRET_ACCESS_KEY = 'AWS_SECRET_ACCESS_KEY' DYNAMODB_REGION_NAME = 'ap-northeast-1' DYNAMODB_TABLE_NAME = 'product_table' DYNAMODB_ENDPOINT_URL = 'http://192.168.33.10:8000'

python

# -*- coding: utf-8 -*- # Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html import boto3 def default_encoder(value, empty_str_replacement = 'empty'): import datetime # For datetime if isinstance(value, datetime.datetime): return value.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(value, datetime.date): return value.strftime('%Y-%m-%d') elif isinstance(value, datetime.time): return value.strftime('%H:%M:%S') else: # For empty str if isinstance(value, str): if value == '': value = empty_str_replacement return value class DynamoDBPipeline(object): def __init__(self, crawler, encoder=default_encoder): self.encoder = encoder self.aws_access_key_id = crawler.settings['AWS_ACCESS_KEY_ID'] self.aws_secret_access_key = crawler.settings['AWS_SECRET_ACCESS_KEY'] self.region_name = crawler.settings['DYNAMODB_REGION_NAME'] self.endpoint_url = crawler.settings['DYNAMODB_ENDPOINT_URL'] self.table_name = crawler.settings['DYNAMODB_TABLE_NAME'] self.table = None @classmethod def from_crawler(cls, crawler): return cls(crawler) def open_spider(self, spider): db = boto3.resource( 'dynamodb', aws_access_key_id=self.aws_access_key_id, aws_secret_access_key=self.aws_secret_access_key, region_name=self.region_name, endpoint_url=self.endpoint_url ) self.table = db.Table(self.table_name) def close_spider(self, spider): self.table = None def process_item(self, item, spider): self.table.put_item( TableName=self.table_name, Item={k: self.encoder(v) for k, v in item.items()}, # TODO: add condintion extension, example is below # ExpressionAttributeNames={"#name" : "name",}, # ConditionExpression='attribute_not_exists(#name) AND attribute_not_exists(category)', ) return item

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Amazon DynamoDB

Amazon DynamoDBは、 AWS上のNoSQLデータベースサービスです。フルマネージド型のサービスで、スキーマレス、高速且つ安定性のある動作、自動的に容量を変更する自動スケーリングなどの特徴を持ちます。

NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。